Iteration 3: Modell- und Modusraster erweitert, Skill 7.0.0, V2/V3 vorbereitet

Neue gueltige Zellen in Iteration 3
- claude-opus-5/solo/high: 363 Anforderungen, 99,7 % mit Primaerbeleg,
  Belege je Anforderung Median 2,0, 38,1 Mio. Tokens
- claude-fable-5/solo/high: 241 Anforderungen, 98,3 % mit Primaerbeleg,
  89,0 % PRIMAER-Anteil, vollstaendig regelkonform, 30,6 Mio. Tokens

Damit sind 6 von 12 Zellen des Rasters belegt. Zwei Befunde daraus:

Die Belegdichte folgt dem Modell, nicht dem Effort. Opus erreicht Median 2,0
auch auf high; alle 44 Sonnet-Laeufe lagen bei 1,0. max hebt Opus auf 3,0.
Die frueher dem Effort zugeschriebene Verdopplung ist damit eingegrenzt.

Die Fable-Modellverletzung ist reproduziert und abgegrenzt. Bei builtin laufen
die Subagenten auf claude-opus-5[1m] statt Fable (zweiter Fall nach Iteration 1),
bei solo dagegen sauber. Nicht das Modell ist die Ursache, sondern Fable in
Kombination mit Delegation.

Fehlmessungen, vollstaendig protokolliert
- vier 429-Abbrueche (Session-Kontingent) aus dem Parallelblock 19:59;
  drei davon mit Teilbestand, einer ohne Ergebnis
- opus-5/builtin/high zum dritten Mal gescheitert: 790,7 Mio. Tokens ueber drei
  Anlaeufe ohne Artefakt. Zelle mit dieser Prompt-Version nicht messbar.

Skill 7.0.0 (MAJOR)
- Isolationsmechanismus modusabhaengig: --safe-mode schaltet MCP-Server und
  Custom-Agenten ab und ist mit V2/V3 unvereinbar. Smoke-Test verifiziert:
  mit Flag spawned=0, ohne Flag spawned=2. Ersatz fuer custom/MCP:
  --strict-mcp-config plus --disallowedTools Skill WebSearch WebFetch SlashCommand.
- 6.1.0: Pflichtpruefung leeres Ergebnisverzeichnis = Fehlmessung unabhaengig von
  is_error; CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0; Protokollfeld Gueltigkeit
- extract-subagenten.py: Start-Quittung wird nicht mehr als Ertragsmass ausgewiesen

Versuch 2 und 3 vorbereitet
- Prompt-Kette V1 -> V2 (02-A, angepasst an Agentendateien) -> V3 (02-B, MCP)
- V2: acht Rollen inkl. nicht delegierendem ISO-29148-Orchestrator
- V3: elf Rollen, fuenf Werkzeugserver, neue Belegklasse LAUFZEIT

Ablaufprotokoll um Phase 6 und 7 sowie die Vorbereitung von V2/V3 ergaenzt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Christoph Schwörer
2026-08-27 08:03:00 +02:00
co-authored by Claude Opus 5
parent affde3a45f
commit 3d5b691bfa
89 changed files with 39498 additions and 104 deletions
+140 -26
View File
@@ -2,7 +2,7 @@
name: run-experiment
description: Führt einen Versuchs-Prompt aus einer Prompt-Datei als messbaren Headless-Lauf mit Claude Code oder Codex CLI aus und schreibt ein Messprotokoll mit Start-/Endzeit, Modell, Tokenverbrauch und weiteren Metriken. Verwenden bei "/run-experiment <Pfad-zur-Prompt-Datei>" oder wenn der User einen Versuch/ein Experiment ausführen und tracken will.
argument-hint: <Pfad zur Prompt-Datei> <Root-Verzeichnis>
version: 5.0.0
version: 7.0.0
---
# RunExperiment – Versuchslauf mit Messprotokoll
@@ -16,8 +16,9 @@ schreibst du ein Messprotokoll neben die Prompt-Datei.
- **Prompt** (Pflicht): Pfad zur Prompt-Datei (Markdown). Erstes Argument in `$ARGUMENTS`.
- **Root** (Pflicht): Verzeichnis, das als Root des Versuchslaufs dient. Zweites Argument.
Der Headless-Lauf wird mit diesem Verzeichnis als Arbeitsverzeichnis gestartet – es ist
die Wurzel der zu analysierenden Codebasis und wird nur GELESEN. Fehlt das Argument: den
Es ist die Wurzel der zu analysierenden Codebasis und wird nur GELESEN. Der Codex-Adapter
erstellt daraus ein isoliertes temporäres Arbeitsabbild; andere Adapter starten
unmittelbar mit diesem Root als Arbeitsverzeichnis. Fehlt das Argument: den
User danach fragen und NICHT stillschweigend das aktuelle Verzeichnis verwenden. Vor dem
Lauf prüfen, dass das Verzeichnis existiert; sonst abbrechen und den User informieren.
- **Modell** (Pflicht, **kein Default**): Wird **vor jedem Lauf beim User erfragt** – siehe
@@ -216,7 +217,7 @@ per stdin übergebenen Text angehängt (siehe Schritt „Prompt zusammenstellen"
unangetastet und die Agentenkonfiguration ist eine dokumentierte, versionierte
Versuchsbedingung. Format siehe `claude --help` zu `--agents`.
**Codex-Adapter in Version 5.0.0:** ausschließlich `solo` ist freigegeben und wird doppelt
**Codex-Adapter ab Version 5.0.0:** ausschließlich `solo` ist freigegeben und wird doppelt
mit `--disable multi_agent` sowie `-c agents.enabled=false` erzwungen. Bei `builtin` oder
`custom` abbrechen und mitteilen, dass dieser Adaptermodus noch nicht verifiziert ist. Eine
stillschweigende Annäherung an Claude-Agentendefinitionen wäre keine reproduzierbare Bedingung.
@@ -255,7 +256,7 @@ per stdin übergebenen Text angehängt (siehe Schritt „Prompt zusammenstellen"
Sort-Object { [int]($_.Name -replace '\D','') }
$iteration = if ($iterationen) { $iterationen[-1].Name } else { 'Iteration 1' }
$zelle = Join-Path (Join-Path (Join-Path $iteration $modell) $modus) $effort
$skillVer = 'v5.0.0' # entspricht version: im Frontmatter dieses Skills
$skillVer = 'v7.0.0' # entspricht version: im Frontmatter dieses Skills
do {
$id4 = '{0:x4}' -f (Get-Random -Maximum 65536)
$lauf = Join-Path "<promptverzeichnis>\$zelle" "<NN>_Lauf_$(Get-Date -Format 'yyyy-MM-dd_HHmmss')_${skillVer}-$id4"
@@ -347,15 +348,16 @@ Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
```
**Codex-Abweichung bei Block 2.** Der Codex-Adapter läuft mit einem technisch erzwungenen
`read-only`-Sandboxmodus. Er kann deshalb auch das externe Laufverzeichnis nicht direkt als
Agent beschreiben. Block 2 wird dort durch folgende strukturierte Rückgabeanweisung ersetzt;
**Codex-Abweichung bei Block 2.** Der Codex-Adapter läuft in einer isolierten Arbeitskopie
im System-Temp-Verzeichnis mit `workspace-write`. Das originale Root liegt außerhalb dieses
Arbeitsbereichs und kann vom Agenten nicht erreicht werden. Trotz des technisch beschreibbaren
Abbilds darf der Agent keine Dateien verändern. Block 2 wird dort durch folgende strukturierte Rückgabeanweisung ersetzt;
die CLI erzwingt `codex-output-schema.json`, anschließend materialisiert
`normalise-codex-result.py` die Dateien:
```
### Ergebnisausgabe (überschreibt anderslautende Pfadangaben oben)
Verändere keine Dateien. Gib alle geforderten Ergebnisdateien im vorgegebenen JSON-Schema zurück.
Verändere keine Dateien im Arbeitsverzeichnis. Gib alle geforderten Ergebnisdateien im vorgegebenen JSON-Schema zurück.
Jeder Eintrag in `files` enthält unter `path` einen relativen Pfad innerhalb von `Ergebnisse`
und unter `content` den vollständigen Dateiinhalt. `summary` enthält nur eine kurze Laufzusammenfassung.
```
@@ -376,6 +378,9 @@ $lauf = "<absoluter Pfad zum Laufverzeichnis>"
$prompt = (Get-Content "<prompt-datei>" -Raw) + "`n`n<Ausgabe-Anweisung>"
# Steuerdateien IMMER ins Laufverzeichnis - nie in den gemeinsamen Scratchpad (parallelfaehig)
Set-Content -Path "$lauf\_meta\combined_prompt.md" -Value $prompt -Encoding utf8
# Ohne diese Variable bricht der Headless-Modus nach 600 s ab, sobald noch
# Hintergrund-Subagenten laufen - und meldet dabei `is_error: false`.
$env:CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS = '0'
Set-Content -Path "$lauf\_meta\startzeit.txt" -Value (Get-Date -Format o)
# Schreibende und bauende Shell-Kommandos sperren – die Codebasis wird nur gelesen.
@@ -414,7 +419,7 @@ Bedeutung der Flags:
| Flag | Zweck |
|---|---|
| `--safe-mode` | Isolation: CLAUDE.md, Skills, Plugins, Hooks, MCP-Server, Custom-Agenten, Commands und Output-Styles aus – ohne Dateieingriff. Auth, Modellwahl, eingebaute Tools und Permissions bleiben normal aktiv. |
| `--safe-mode` | Isolation: CLAUDE.md, Skills, Plugins, Hooks, MCP-Server, Custom-Agenten, Commands und Output-Styles aus – ohne Dateieingriff. Auth, Modellwahl, eingebaute Tools und Permissions bleiben normal aktiv. **Nur in den Modi `solo` und `builtin` verwendbar** – siehe „Isolation je Agentenmodus". |
| `--strict-mcp-config` | zweite Absicherung gegen MCP-Server aus Projekt- oder User-Konfiguration |
| `--permission-mode acceptEdits` | Schreibrechte für die Ergebnisdateien im Laufverzeichnis |
| `--allowedTools "Bash" "PowerShell"` | **Shell-Zugriff ohne Rückfrage** – Standard seit Prompt-Version 02 |
@@ -434,6 +439,55 @@ Die belastbare Read-only-Garantie bleibt der Vorher/Nachher-Vergleich per
`git status --porcelain` aus Abschnitt 1 bzw. 3. Die Denylist senkt das Risiko, sie ersetzt die
Verifikation nicht.
**Isolation je Agentenmodus – `--safe-mode` ist nicht immer verwendbar.**
`--safe-mode` schaltet ausweislich der CLI-Hilfe „all customizations (CLAUDE.md, skills, plugins,
hooks, **MCP servers, custom commands and agents**, output styles, workflows, …)" ab. Damit
deaktiviert es genau das, was die Modi `custom` (V2) und der MCP-Einsatz (V3) untersuchen sollen.
Verifiziert am 2026-08-26 gegen CLI 2.1.246 mit identischem Aufruf, nur `--safe-mode` variiert:
| Konfiguration | `subagent_stats.spawned` | `by_type` |
|---|---:|---|
| mit `--safe-mode` | **0** | leer – der Agent meldet, die Rollen seien „nicht in der Agent-Registry registriert" |
| ohne `--safe-mode` | **2** | `{"modulinventar": 1, "konsistenzpruefer": 1}` |
Daraus folgt eine modusabhängige Isolation:
| Modus | Isolation |
|---|---|
| `solo`, `builtin` | `--safe-mode` + `--strict-mcp-config` (unverändert) |
| `custom`, sowie jeder Lauf mit `--mcp-config` | **kein** `--safe-mode`; stattdessen `--strict-mcp-config` und die Sperre `--disallowedTools Skill WebSearch WebFetch SlashCommand` |
Der gezielte Ersatz wurde am selben Tag gegengeprüft. Der Agent antwortete auf eine
Werkzeugabfrage: `VORGELADEN: NICHTS VORGELADEN` · `SKILLS: KEINE` · `WEB: KEIN WEBZUGRIFF` ·
alle acht Custom-Rollen verfügbar. Ohne die Sperre lädt die CLI **16 global installierte Skills**
(darunter `code-review`, `security-review`, `run`, `init`); `--setting-sources ''` unterdrückt sie
**nicht**.
**Was der Ersatz nicht abdeckt.** `--safe-mode` deaktiviert zusätzlich Plugins, Hooks und
Output-Styles. Die Sperre tut das nicht. Auf der Maschine, auf der die Versuchsreihe läuft, sind
davon keine konfiguriert (`~/.claude/settings.json` enthält nur `model` und
`agentPushNotifEnabled`, kein `hooks`; kein `plugins`- und kein `output-styles`-Verzeichnis) –
das ist jedoch eine Eigenschaft der Umgebung, keine Garantie. **Vor jedem Lauf im Modus `custom`
oder mit MCP ist deshalb zu prüfen:**
```powershell
$us = Join-Path $env:USERPROFILE '.claude\settings.json'
if (Test-Path $us) { (Get-Content $us -Raw | ConvertFrom-Json).PSObject.Properties.Name }
foreach ($d in 'plugins','output-styles','skills') {
$pfad = Join-Path $env:USERPROFILE ".claude\$d"
if (Test-Path $pfad) { "VORHANDEN: $d -> " + ((Get-ChildItem $pfad | Measure-Object).Count) + ' Eintraege' }
}
```
Treten Hooks, Plugins oder Output-Styles auf, ist der Lauf **nicht** isoliert und die Bedingung
im Protokoll als abweichend zu kennzeichnen.
**Unverändert bleibt:** `--safe-mode` hat die Modellwahl nie beeinflusst. Der Eintrag `model` in
den User-Settings (hier `opus[1m]`) kann Subagenten binden – das ist der bekannte Grund der zwei
dokumentierten Modellabweichungen und gilt mit wie ohne `--safe-mode`.
**`--safe-mode` bleibt als zweite Sicherung aktiv.** Die primäre Isolation leistet der
bereinigte Snapshot (Abschnitt 1); `--safe-mode` fängt zusätzlich alles ab, was von außerhalb
des Roots wirken könnte – User-Level-Settings, global installierte Skills, Plugins, Hooks.
@@ -542,6 +596,32 @@ Subagenten gibt.
Bei Modus `builtin` oder `custom` daher **nie** den Flag-Wert allein ins Protokoll schreiben,
sondern die Modelle aus `modelUsage` mit ihrem jeweiligen Anteil ausweisen.
**Pflichtprüfung: Hat der Lauf überhaupt etwas erzeugt?** `is_error` allein genügt **nicht**.
Ein Lauf kann `is_error: false`, `subtype: success` und `terminal_reason: completed` melden und
trotzdem **null Ergebnisdateien** hinterlassen. Belegt am 2026-08-26, Lauf
`Iteration 3/claude-opus-5/builtin/high/…160037_v4.5.0-116d`: Der Hauptagent startete zehn
Subagenten im Hintergrund, beendete seinen Turn und schrieb als Abschlusstext „Die Erhebung
läuft"; der Headless-Modus wartete 600 s und brach dann ab. `Stderr.log` enthielt
„Background tasks still running after 600s; terminating." Verbraucht waren zu diesem Zeitpunkt
**193,4 Mio. Tokens** – der teuerste Lauf der Reihe, ohne ein einziges Artefakt.
Nach jedem Lauf daher zwingend prüfen:
1. `Ergebnisse\` ist **nicht leer** und enthält die vom Prompt geforderten Dateien. Fehlen sie,
ist der Lauf **unabhängig von `is_error` als Fehlmessung zu kennzeichnen**.
2. `Stderr.log` enthält keine Abbruchmeldung. Die Datei ist im Normalfall 0 Byte groß.
Vorbeugend setzt der Ausführungsabschnitt `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`, damit der
Lauf auf seine Hintergrund-Subagenten wartet, statt sie abzuschneiden.
**Subagenten-Ergebnisse kommen nicht als Werkzeugergebnis zurück.** Startet der Hauptagent einen
Subagenten im Hintergrund, liefert der Werkzeugaufruf sofort eine **Start-Quittung** von rund
1.093 Zeichen („Async agent launched successfully …") zurück, nicht die Befunde. Deren Länge ist
folglich **kein** Maß für den Ertrag des Subagenten. Die Quittung nennt einen Pfad
`<temp>\<session>\tasks\<agentId>.output`; diese Dateien werden zwar angelegt, bleiben aber
**leer** (geprüft an 33 Dateien aus zwei Läufen). Die Aussage, dass Subagenten-Transkripte nicht
auswertbar persistiert werden, gilt damit unverändert.
`permission_denials` ist eine **reguläre Messgröße** und immer auszuweisen, auch bei 0. Ein
hoher Wert bedeutet, dass die Werkzeugkonfiguration den Lauf eingeschränkt hat, und ist bei der
Interpretation der Ergebnisqualität zu berücksichtigen.
@@ -683,7 +763,11 @@ Vorlage:
- **Permission-/Sandbox-Modus:** <acceptEdits | read-only / approval never | ...>
- **Toolfreigabe:** <adapterabhängige Flags wörtlich>
- **Isolationsmechanismus:** <adapterabhängige Flags wörtlich>
- **MCP-Server / Agentendateien:** <keine – aus dem Snapshot entfernt, zusätzlich --safe-mode | Liste>
- **MCP-Server / Agentendateien:** <keine – aus dem Snapshot entfernt, zusätzlich --safe-mode |
Liste der Server mit Pfad und SHA-256 der `--mcp-config`-Datei; Pfad und SHA-256 der
`--agents`-Datei>
- **Umgebungsprüfung (nur `custom` / MCP):** <keine Hooks, Plugins, Output-Styles im
User-Profil vorgefunden | **abweichend**: welche>
- **Subagenten:** <Anzahl und Typ aus `subagent_stats`, z. B. 8 × Explore, 0 fehlgeschlagen>
- **Verschachtelung:** `spawned` = <N>, davon `spawned_by_subagents` = <M>, `max_depth` = <D>.
Bei `max_depth` > 1 ausdrücklich vermerken – die Tokens der tieferen Ebenen sind in
@@ -742,6 +826,8 @@ Status, Regelkonformität>
- **Kontrolle Agentenmodus:** `subagent_stats.spawned` = <Zahl> (bei `solo` muss 0 stehen,
sonst Fehlmessung)
- **Subagenten-Prompts:** <`_meta\subagenten.md`, N Aufrufe erfasst | entfällt (Modus solo)>
- **Gültigkeit:** <gültig | **Fehlmessung**: Ergebnisverzeichnis leer / Abbruchmeldung in
Stderr.log – Wortlaut zitieren>
- **Erzeugte Dateien:** <Liste aus Ergebnisse\>
- **Root unverändert:** <ja | nein: welche Abweichungen>
- **Abschlusstext des Agenten:** siehe RawResult.json (`result`)
@@ -789,28 +875,47 @@ OpenAI-Modell-IDs entworfen. Referenzstand bei Einführung: **Codex CLI 0.149.0-
Vor jedem Lauf `codex --version` protokollieren; bei geändertem JSONL-Schema den Normalisierer
zuerst mit einem kleinen, ausdrücklich freigegebenen Smoke-Test prüfen.
**Unterstützter Agentenmodus:** In Version 5.0.0 nur `solo`. `builtin` und `custom` müssen
**Unterstützter Agentenmodus:** Auch in Version 6.0.0 nur `solo`. `builtin` und `custom` müssen
abbrechen. `solo` wird mit zwei unabhängigen Einstellungen erzwungen:
`--disable multi_agent` und `-c agents.enabled=false`.
**Isolation und Ausgabe.** Codex arbeitet im Root mit `--sandbox read-only`. Anders als beim
Claude-Adapter erhält der Agent deshalb kein beschreibbares Zusatzverzeichnis. Er liefert ein
Schemaobjekt mit vollständigen Dateiinhalten; `--output-last-message` schreibt dieses durch die
CLI nach `_meta\final_response.json`. Erst nach Ende des Agenten materialisiert das lokale,
deterministische Skript die validierten relativen Pfade unter `Ergebnisse\`. Absolute Pfade,
`..`, Laufwerkspräfixe und case-insensitive Duplikate werden abgelehnt.
**Isolation und Ausgabe.** Unter Windows blockierte `--sandbox read-only` mit Codex CLI
0.149.0-alpha.4.3 bereits den Start rein lesender Prozesse (`pwsh`, `cmd`, `rg`). Der Adapter
erstellt deshalb vor dem Lauf eine isolierte Kopie der versionierten und nicht ignorierten
Quelldateien im System-Temp-Verzeichnis und startet Codex dort mit `--sandbox workspace-write`.
Das originale Root liegt außerhalb des Codex-Arbeitsbereichs und bleibt technisch getrennt.
`prepare-codex-workspace.py` hasht die Kopie vor und nach dem Lauf; jede Änderung macht den Lauf
ungültig. Quelle, Dateizahl, Größe und beide Manifeste werden unter `_meta` archiviert; die
temporäre Kopie wird erst nach der Integritätsprüfung entfernt. Die Ablage außerhalb des
IDE-Projektbaums verhindert automatische Design-Time-Restores, die sonst ungefragt `obj`-Dateien
in der Kopie erzeugen.
Der Agent liefert weiterhin ausschließlich ein Schemaobjekt mit vollständigen Dateiinhalten;
`--output-last-message` schreibt dieses durch die CLI nach `_meta\final_response.json`. Erst nach
Ende des Agenten materialisiert das lokale, deterministische Skript die validierten relativen
Pfade unter `Ergebnisse\`. Absolute Pfade, `..`, Laufwerkspräfixe und case-insensitive Duplikate
werden abgelehnt.
Vor dem Start `$codex`, `$skillDir`, `$lauf`, `$root`, `$modell` und `$effort` auf absolute
Pfade beziehungsweise die bestätigten Versuchsbedingungen setzen. Den Prompt mit dem
Codex-Ausgabeblock aus Abschnitt 2 nach `_meta\combined_prompt.md` schreiben. Der eigentliche
Aufruf lautet:
Codex-Ausgabeblock aus Abschnitt 2 nach `_meta\combined_prompt.md` schreiben. Anschließend das
isolierte Abbild anlegen; bei einem Fehler darf der API-Lauf nicht starten:
```powershell
$meta = Join-Path $lauf '_meta'
$workspace = Join-Path ([IO.Path]::GetTempPath()) "codex-experiment-<Laufverzeichnis-ID>"
python (Join-Path $skillDir 'prepare-codex-workspace.py') create $root $workspace $meta
if ($LASTEXITCODE -ne 0) { throw 'Codex-Arbeitsabbild konnte nicht erstellt werden.' }
```
Der eigentliche Aufruf lautet:
```powershell
$codexArgs = @(
'--model', $modell,
'-c', "model_reasoning_effort=`"$effort`"",
'-c', 'service_tier="default"',
'--sandbox', 'read-only',
'--sandbox', 'workspace-write',
'--ask-for-approval', 'never',
'--disable', 'multi_agent',
'-c', 'agents.enabled=false',
@@ -818,7 +923,7 @@ $codexArgs = @(
'--disable', 'apps',
'--disable', 'hooks',
'--disable', 'skill_search',
'--cd', $root,
'--cd', $workspace,
'exec',
'--ignore-user-config',
'--ignore-rules',
@@ -837,14 +942,20 @@ $codexExit = $LASTEXITCODE
Set-Content -Path "$lauf\_meta\exitcode.txt" -Value $codexExit
Set-Content -Path "$lauf\_meta\endzeit.txt" -Value (Get-Date -Format o)
python (Join-Path $skillDir 'prepare-codex-workspace.py') verify $workspace $meta
$workspaceExit = $LASTEXITCODE
python (Join-Path $skillDir 'normalise-codex-result.py') $lauf `
--model $modell --effort $effort
python (Join-Path $skillDir 'prepare-codex-workspace.py') cleanup $workspace $meta
```
Auch dieser Aufruf ist als Background-Task zu starten. Das Erscheinen von `RawEvents.jsonl`
allein bedeutet noch nicht, dass der Lauf fertig ist; Ende ist der abgeschlossene Prozess plus
erzeugte `RawResult.json`. Schlägt die Normalisierung fehl, Rohdateien unverändert lassen und
den Lauf als Fehler protokollieren.
Integritätsprüfung und erzeugte `RawResult.json`. Ist `$workspaceExit` ungleich null, den Lauf
wegen einer veränderten Arbeitskopie als ungültig kennzeichnen. Schlägt die Normalisierung fehl,
Rohdateien unverändert lassen und den Lauf als Fehler protokollieren.
**Warum diese Flags:**
@@ -853,13 +964,13 @@ den Lauf als Fehler protokollieren.
| `--model <id>` | vollständige, vom User bestätigte OpenAI-Modell-ID |
| `model_reasoning_effort` | expliziter Denkaufwand |
| `service_tier="default"` | verhindert eine geerbte Fast-/Priority-Bedingung |
| `--sandbox read-only` | technische Schreibsperre für den Codebasis-Snapshot |
| `--sandbox workspace-write` | erlaubt Windows-Prozessstarts nur innerhalb der isolierten Arbeitskopie |
| `--ask-for-approval never` | keine interaktiven Unterbrechungen im Headless-Lauf |
| `--ignore-user-config`, `--ignore-rules` | keine User-Konfiguration und keine Exec-Regeln |
| `--disable plugins/apps/hooks/skill_search` | keine externen oder benutzerspezifischen Erweiterungen |
| `--disable multi_agent`, `agents.enabled=false` | keine Subagenten im Modus `solo` |
| `--json` | vollständiger maschinenlesbarer Ereignisstrom |
| `--output-schema`, `--output-last-message` | validierbare Ergebnisdateien ohne Schreibrecht des Agenten |
| `--output-schema`, `--output-last-message` | validierbare Ergebnisdateien außerhalb des Arbeitsabbilds |
`--ignore-user-config` lässt die gespeicherte Authentifizierung weiterhin nutzbar; niemals
`auth.json` kopieren oder in Laufartefakten ablegen. Live-Websuche ist nicht freigegeben, weil
@@ -946,6 +1057,9 @@ der Historie unten – im selben Arbeitsschritt.
| Version | Änderung | Grund | Verwendet in |
|---|---|---|---|
| **7.0.0** | **Isolationsmechanismus wird modusabhängig.** In den Modi `solo` und `builtin` unverändert `--safe-mode`; im Modus `custom` und bei jedem Lauf mit `--mcp-config` **kein** `--safe-mode`, stattdessen `--strict-mcp-config` plus `--disallowedTools Skill WebSearch WebFetch SlashCommand`. Neue Pflicht-Umgebungsprüfung auf Hooks, Plugins und Output-Styles im User-Profil; neue Protokollfelder für die MCP-Konfiguration und die Umgebungsprüfung. | `--safe-mode` schaltet ausweislich der CLI-Hilfe „MCP servers, custom commands and agents" ab – also genau das, was V2 und V3 untersuchen. Smoke-Test am 2026-08-26 (CLI 2.1.246, identischer Aufruf, nur `--safe-mode` variiert): mit Flag `spawned` = 0 und die Meldung, die Rollen seien „nicht in der Agent-Registry registriert"; ohne Flag `spawned` = 2 mit `{"modulinventar": 1, "konsistenzpruefer": 1}`. Ohne Ersatz hätte der erste V2-Lauf stillschweigend als V1-Lauf gemessen. Der Ersatz wurde gegengeprüft: nichts vorgeladen, keine Skills, kein Webzugriff, alle Rollen verfügbar. **MAJOR: Läufe im Modus `custom` sind hinsichtlich der Isolation nicht unmittelbar mit `solo`- und `builtin`-Läufen vergleichbar** – Plugins, Hooks und Output-Styles sind dort nicht durch das Flag, sondern nur durch die Umgebungsprüfung ausgeschlossen. | ab dem ersten V2-Lauf |
| **6.1.0** | Zwei adapterunabhängige Pflichtprüfungen nach jedem Lauf: **(a)** `Ergebnisse\` darf nicht leer sein – sonst Fehlmessung, unabhängig von `is_error`; **(b)** `Stderr.log` auf Abbruchmeldungen prüfen. Der Ausführungsabschnitt setzt `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`. Neues Protokollfeld „Gültigkeit". Dokumentiert, dass die Rückgabe eines Hintergrund-Subagenten eine Start-Quittung ist und ihre Länge kein Ertragsmaß. | Lauf `…160037_v4.5.0-116d` meldete `is_error: false`, `subtype: success` und lieferte **null Ergebnisdateien** bei 193,4 Mio. Tokens – der Headless-Modus hatte nach 600 s abgebrochen, während zehn Hintergrund-Subagenten noch liefen. Ohne die neue Prüfung wäre der Lauf als gültiger Messpunkt mit „0 Anforderungen" in den Modellvergleich eingegangen. MINOR: neue Prüfschritte; die Umgebungsvariable ändert die Versuchsbedingung für künftige `builtin`-Läufe und ist dort zu vermerken. | ab sofort |
| **6.0.0** | **Windows-taugliche Codex-Isolation.** Pro Lauf wird im System-Temp-Verzeichnis außerhalb des IDE-Projektbaums eine Kopie der versionierten und nicht ignorierten Dateien des Codebasis-Roots erstellt. Codex läuft ausschließlich dort mit `--sandbox workspace-write`; SHA-256-Manifeste vor und nach dem Lauf erkennen jede Änderung. Ergebnisse und Nachweise bleiben im Laufverzeichnis, die temporäre Kopie wird danach entfernt. | Der erste Codex-Lauf mit 5.0.0 konnte fachlich nicht starten, weil die Windows-Read-only-Sandbox sämtliche lesenden Kindprozesse vor dem Start blockierte. Eine Kopie im Laufverzeichnis wurde zudem vom C#-Projektservice automatisch mit ignorierten `obj`-Dateien verändert. MAJOR, weil Sandboxmodus und Arbeitsverzeichnis eine neue Versuchsbedingung bilden; der erste Lauf eröffnet deshalb eine neue Iteration. | ab dem ersten wiederholten Codex-Lauf |
| **5.0.0** | **Neuer Codex-CLI-Adapter für OpenAI-Modelle.** Exakte OpenAI-Modell-IDs, expliziter Reasoning-Effort und Service-Tier; technisch read-only ausgeführtes `codex exec`; schemaerzwungene Dateirückgabe; JSONL-Rohdaten und deterministische Normalisierung nach `RawResult.json`. Codex ist zunächst nur im Modus `solo` freigegeben. Zusätzlich fünf beschädigte Backslashes vor `analyse-anforderungen.py`, `anforderungen.*` und `after.txt` repariert. | Der bisherige Skill konnte nur Claude Code ausführen. Ein Codex-Lauf braucht andere Isolations-, Ausgabe- und Messmechanismen. MAJOR, weil Werkzeug, Rohdatenformat und Ergebnisübergabe neue Versuchsbedingungen bilden; der nächste Lauf eröffnet deshalb eine neue Iteration. | ab dem ersten Codex-Lauf |
| **1.0.0** | Ausgangsfassung: `--permission-mode acceptEdits`, kein Shell-Zugriff; Isolation durch Löschen der KI-Konfigurationsdateien im Root vor dem Lauf und `git restore` danach | Erstaufsetzung des Versuchsaufbaus | Lauf 1 (`01_Lauf_2026-08-25_1228`) |
| **2.0.0** | `--allowedTools "Bash" "PowerShell"` + 33er-Denylist für schreibende und bauende Kommandos. Isolation über **eingefrorenen Codebasis-Snapshot ohne KI-Konfigurationen** (Commit `79c1142`, Parent `89ccfd6`, GitHub-Remote entkoppelt), zusätzlich `--safe-mode` und `--strict-mcp-config`. Der destruktive Lösch-/Restore-Schritt pro Lauf entfällt. `permission_denials` und `subagent_stats` werden reguläre Messgrößen; Verbrauchstabelle trennt Hauptagent und Gesamtlauf. CLI-Pfad-Auflösung als eigener Schritt. | Lauf 1 erzeugte 36 Permission-Denials (32 × Bash, 4 × PowerShell); Shell-gestützte Verzeichnisinventuren fehlten dem Agenten. `--safe-mode` allein genügt nicht: Es unterdrückt das Vorladen von `CLAUDE.md`/`AGENTS.md`, verhindert aber nicht, dass der Agent sie mit Shell-Zugriff selbst liest – im Smoke-Test nachgewiesen. | Lauf 2 (`01_Lauf_2026-08-25_1349`, API-Abbruch) |
@@ -64,6 +64,10 @@ for a in aufrufe:
txt = ergebnisse.get(a['id']) or ''
a['ergebnis_zeichen'] = len(txt)
a['abgewiesen'] = ABSAGE in txt
# Ein im Hintergrund gestarteter Subagent liefert sofort eine Start-Quittung
# ('Async agent launched successfully'), nicht seine Befunde. Ihre Laenge ist
# KEIN Ertragsmass - sie ist fuer alle Hintergrund-Subagenten praktisch gleich.
a['nur_startquittung'] = 'Async agent launched successfully' in txt
abgewiesen = [a for a in aufrufe if a['abgewiesen']]
echte = [a for a in aufrufe if not a['abgewiesen']]
@@ -102,8 +106,11 @@ for i, a in enumerate(echte, 1):
'',
'- **Werkzeug:** `%s` **Typ:** `%s` **Hintergrund:** %s'
% (a['werkzeug'], a['subagent_type'], a['run_in_background']),
'- **Prompt-Zeichen:** %d **Ergebnis-Zeichen:** %s'
% (len(a['prompt']), a['ergebnis_zeichen']),
'- **Prompt-Zeichen:** %d **Rueckgabe:** %s'
% (len(a['prompt']),
'Start-Quittung (Befunde kommen per Benachrichtigung, nicht als '
'Werkzeugergebnis - Laenge ist kein Ertragsmass)'
if a.get('nur_startquittung') else '%s Zeichen' % a['ergebnis_zeichen']),
'', '### Prompt', '', '```', a['prompt'].rstrip(), '```', '']
io.open(os.path.join(meta, 'subagenten.md'), 'w', encoding='utf-8').write('\n'.join(md))
@@ -111,6 +118,8 @@ print('Subagenten gefunden: %d echte%s (direkt erwartet: %s, gesamt: %s, davon v
% (len(echte), (', %d abgewiesen' % len(abgewiesen)) if abgewiesen else '',
erwartet, gesamt, verschachtelt))
for a in echte:
print(' - %-42s %s Prompt %6d Z. Ergebnis %s Z.'
% ((a['description'] or '')[:42], a['subagent_type'], len(a['prompt']), a['ergebnis_zeichen']))
print(' - %-42s %-16s Prompt %6d Z. %s'
% ((a['description'] or '')[:42], a['subagent_type'], len(a['prompt']),
'Hintergrund (Start-Quittung)' if a.get('nur_startquittung')
else 'Ergebnis %s Z.' % a['ergebnis_zeichen']))
print('geschrieben:', os.path.join(meta, 'subagenten.md'))
@@ -0,0 +1,207 @@
#!/usr/bin/env python3
"""Create and verify an isolated Codex analysis workspace."""
from __future__ import annotations
import argparse
import hashlib
import json
import os
import shutil
import subprocess
import tempfile
from pathlib import Path
def fail(message: str) -> None:
raise SystemExit(message)
def resolved(path: str) -> Path:
return Path(path).resolve()
def native_path(path: Path) -> str:
value = str(path)
if os.name == "nt" and not value.startswith("\\\\?\\"):
return "\\\\?\\" + value
return value
def allowed_workspace(workspace: Path, meta: Path) -> bool:
temporary_root = Path(tempfile.gettempdir()).resolve()
return (
(workspace.parent == meta and workspace.name == "workspace")
or (workspace.parent == temporary_root and workspace.name.startswith("codex-experiment-"))
)
def git_output(cwd: Path, *args: str) -> bytes:
completed = subprocess.run(
["git", "-C", str(cwd), *args],
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
return completed.stdout
def source_files(source: Path) -> tuple[list[Path], str | None]:
try:
top = resolved(git_output(source, "rev-parse", "--show-toplevel").decode().strip())
relative_source = source.relative_to(top)
raw = git_output(
top,
"ls-files",
"-z",
"--cached",
"--others",
"--exclude-standard",
"--",
relative_source.as_posix(),
)
paths = []
for entry in raw.split(b"\0"):
if not entry:
continue
candidate = resolved(top / os.fsdecode(entry))
if candidate.is_file() and candidate.is_relative_to(source):
paths.append(candidate)
return sorted(set(paths), key=lambda item: item.as_posix().casefold()), str(top)
except (subprocess.CalledProcessError, ValueError):
paths = [item for item in source.rglob("*") if item.is_file() and ".git" not in item.parts]
return sorted(paths, key=lambda item: item.as_posix().casefold()), None
def sha256(path: Path) -> str:
digest = hashlib.sha256()
with open(native_path(path), "rb") as handle:
for chunk in iter(lambda: handle.read(1024 * 1024), b""):
digest.update(chunk)
return digest.hexdigest().upper()
def manifest(workspace: Path) -> dict[str, dict[str, int | str]]:
result: dict[str, dict[str, int | str]] = {}
workspace_native = native_path(workspace)
files: list[tuple[str, Path]] = []
for directory, _, names in os.walk(workspace_native):
for name in names:
full_path = Path(directory) / name
relative = os.path.relpath(str(full_path), workspace_native).replace("\\", "/")
files.append((relative, full_path))
for relative, path in sorted(files, key=lambda item: item[0].casefold()):
result[relative] = {"size": os.stat(str(path)).st_size, "sha256": sha256(path)}
return result
def write_json(path: Path, value: object) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
def create(source_arg: str, workspace_arg: str, meta_arg: str) -> None:
source = resolved(source_arg)
workspace = resolved(workspace_arg)
meta = resolved(meta_arg)
if not source.is_dir():
fail(f"Source directory does not exist: {source}")
if not allowed_workspace(workspace, meta):
fail("Workspace must be _meta/workspace or a codex-experiment-* directory in system temp")
if workspace.exists():
before_manifest = meta / "workspace-manifest-before.json"
if workspace.parent == meta and workspace.name == "workspace" and not before_manifest.exists():
shutil.rmtree(native_path(workspace))
else:
fail(f"Workspace already exists: {workspace}")
files, git_root = source_files(source)
workspace.mkdir(parents=True)
for path in files:
relative = path.relative_to(source)
target = workspace / relative
os.makedirs(native_path(target.parent), exist_ok=True)
try:
shutil.copy2(native_path(path), native_path(target), follow_symlinks=False)
except OSError as error:
fail(f"Failed to copy {path} -> {target}: {error}")
before = manifest(workspace)
write_json(meta / "workspace-manifest-before.json", before)
write_json(
meta / "workspace-source.json",
{
"source": str(source),
"workspace": str(workspace),
"git_root": git_root,
"file_count": len(before),
"total_bytes": sum(int(item["size"]) for item in before.values()),
},
)
print(f"Created isolated workspace with {len(before)} files: {workspace}")
def verify(workspace_arg: str, meta_arg: str) -> None:
workspace = resolved(workspace_arg)
meta = resolved(meta_arg)
before_path = meta / "workspace-manifest-before.json"
if not workspace.is_dir() or not before_path.is_file():
fail("Workspace or before-manifest is missing")
before = json.loads(before_path.read_text(encoding="utf-8"))
after = manifest(workspace)
added = sorted(set(after) - set(before), key=str.casefold)
removed = sorted(set(before) - set(after), key=str.casefold)
modified = sorted(
(path for path in set(before) & set(after) if before[path] != after[path]),
key=str.casefold,
)
write_json(meta / "workspace-manifest-after.json", after)
result = {
"unchanged": not (added or removed or modified),
"added": added,
"removed": removed,
"modified": modified,
"file_count_before": len(before),
"file_count_after": len(after),
}
write_json(meta / "workspace-integrity.json", result)
print(json.dumps(result, ensure_ascii=False))
if not result["unchanged"]:
raise SystemExit(3)
def cleanup(workspace_arg: str, meta_arg: str) -> None:
workspace = resolved(workspace_arg)
meta = resolved(meta_arg)
if not allowed_workspace(workspace, meta):
fail("Refusing to remove a directory outside the approved experiment workspace locations")
if workspace.exists():
shutil.rmtree(native_path(workspace))
print(f"Removed temporary workspace: {workspace}")
def main() -> None:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest="command", required=True)
create_parser = subparsers.add_parser("create")
create_parser.add_argument("source")
create_parser.add_argument("workspace")
create_parser.add_argument("meta")
verify_parser = subparsers.add_parser("verify")
verify_parser.add_argument("workspace")
verify_parser.add_argument("meta")
cleanup_parser = subparsers.add_parser("cleanup")
cleanup_parser.add_argument("workspace")
cleanup_parser.add_argument("meta")
args = parser.parse_args()
if args.command == "create":
create(args.source, args.workspace, args.meta)
elif args.command == "verify":
verify(args.workspace, args.meta)
else:
cleanup(args.workspace, args.meta)
if __name__ == "__main__":
main()
+203 -4
View File
@@ -30,7 +30,7 @@ gleichen Bedingungen streuen.
---
## 2. Chronologie in sechs Phasen
## 2. Chronologie in sieben Phasen
### Phase 1 – Erster Lauf und die Entdeckung der Werkzeugkonfiguration (12:29–13:00)
@@ -287,6 +287,192 @@ und Iteration 3 entstanden am selben Tag. Weil „Iteration" mit der Fassung der
kollidierte, heißt diese seither **Prompt-Version**. Die Prompt-Dateien selbst blieben unverändert:
Ihre SHA-256 sind in 33 Protokollen dokumentiert.
### Phase 7 – Delegation, Effort und zwei Totalausfälle (26.08., ab 12:50)
Nach den zehn `solo`-Läufen folgten drei Zellen, die die verbliebenen Stellschrauben trennen
sollten: `builtin` mit Sonnet, `max`-Effort mit Opus, und `builtin` mit Opus.
**Der Effort ist die wirksamste Einzelvariable der gesamten Reihe.** Über alle 44 Läufe auf
`high` lag der Median konstant bei **einem** Beleg je Anforderung – genau der Befund, wegen dem
Prompt-Version 02 geschrieben wurde und der sich unter Version 02 auf `high` sogar verschärft
hatte. Die drei `max`-Läufe liegen bei 2,0 / 2,0 / 3,0:
| Lauf | Anf. | Belege/Anf. | mit Primärbeleg | Risiko offen | Tokens |
|---|---:|---:|---:|---:|---:|
| `a8f5` | 380 | 2,0 | 95,5 % | 0 von 112 | 67,5 Mio. |
| `37c5` | 434 | 2,0 | **100 %** | 0 von 100+ | 77,3 Mio. |
| `fcdf` | 446 | **3,0** | 98,2 % | 0 von 139 | 116,2 Mio. |
Alle drei erfüllen sämtliche fünf Regelkriterien. **Damit kippt auch die Anti-Korrelation:** Über
die zehn `solo`/`high`-Läufe liefen Anforderungszahl und Belegqualität gegeneinander
(Pearson −0,63, Spearman −0,70); auf `max` treten beide zusammen auf. Der Zielkonflikt war kein
Gesetz, sondern Folge zu knappen Aufwands. Das beantwortet zugleich die in Abschnitt 8 offene
Frage nach dem Fable-Block teilweise: Der Verbrauchssprung dort kam **nicht** allein vom Modell.
**`max` zeigt sich nicht in Thinking-Tokens.** `a8f5` liegt mit 51.019 im Bereich der
`high`-Läufe (33.051–55.760). Der Mehraufwand steckt in Turns und Laufzeit: 210 bis 371 Turns,
1:34 bis 2:33 Stunden. Die Vermutung aus Iteration 1, `max` sei an den Thinking-Token-Werten
erkennbar, trägt nicht.
**Bei `builtin` entscheidet die Beauftragung der Subagenten, nicht deren Anzahl.** Drei Läufe,
gleicher Prompt, gleiches Modell:
| Lauf | Subagenten | Auftragsart | Anf. | mit Primärbeleg |
|---|---:|---|---:|---:|
| `4048` | 6 | „concrete, citable **FACTS only** … find the **EXACT enforcing location**" | 185 | **97,8 %** |
| `fb24` | 31 (2 Ebenen) | „Research … M01–M20" mit Faktenpflicht | 383 | **96,9 %** |
| `f8b4` | 8 | „**quickly inspect** … open **1-3 representative files**" | 276 | **46,4 %** |
Aus einer Stichprobe von ein bis drei Dateien lässt sich kein Primärbeleg gewinnen – die
durchsetzende Stelle liegt fast nie in der Datei, die repräsentativ aussieht. Damit hat
Befund 6.3 erstmals eine **inhaltliche** Erklärung statt nur einer Zahl. Genau dafür wurde die
Erfassung der Subagenten-Prompts in Skill 3.3.0 eingeführt.
Nebenbefund: `fb24` verlagerte 63,5 % seines Verbrauchs auf die Subagenten, `4048` sogar 78,4 %,
bei nur 26 Turns im Hauptagenten. Delegation verschiebt den Verbrauch, ohne ihn zwangsläufig zu
erhöhen – anders als in Iteration 1, wo `builtin` deutlich über `solo` lag.
**Zwei Totalausfälle in der Zelle Opus + `builtin`.** Beide Läufe scheiterten, auf verschiedene
Weise, und verbrauchten zusammen **586 Mio. Tokens ohne verwertbares Ergebnis**:
- `116d` – **stiller Fehlschlag.** `is_error: false`, `subtype: success`,
`terminal_reason: completed` – und **null Ergebnisdateien**. Der Hauptagent hatte zehn
Subagenten im Hintergrund gestartet und seinen Turn beendet; der Headless-Modus wartete 600 s
und brach ab. Der einzige Hinweis stand in `Stderr.log`. Verbraucht: 193,4 Mio. Tokens.
- `9d9e` – **API-Abbruch**, HTTP 429, „You've hit your session limit". 34 Subagenten, davon 24
von Subagenten gestartet, 22 weitere am Nebenläufigkeitslimit abgewiesen. Verbraucht:
392,9 Mio. Tokens, eine Ergebnisdatei von sieben.
Der stille Fehlschlag ist der methodisch wichtigere: **`is_error` erkennt ihn nicht.** Ohne den
Blick ins Ergebnisverzeichnis wäre der Lauf als gültiger Messpunkt mit „0 Anforderungen" in den
Modellvergleich eingegangen.
**Die Modellbedingung ist bei Delegation nicht über `--model` herstellbar.** `9d9e` weist neben
`claude-opus-5` auch `claude-sonnet-5` mit 18,5 Mio. Tokens (4,72 %) aus – der zweite
dokumentierte Fall nach Fable in Iteration 1. Beide betreffen ausschließlich den Modus `builtin`.
Für saubere Modellvergleiche ist `solo` zu verwenden oder die Modellbindung der Subagenten
gesondert zu belegen. Das betrifft Versuch 2 und 3 unmittelbar, die beide auf Delegation setzen.
**Vier weitere Messinstrument-Defekte gefunden und behoben:**
- *Abgewiesene Subagenten wurden als Subagenten gezählt* (Skill 4.5.0 / heute 6.1.0-Zweig).
`fb24` meldete 21 gefundene gegenüber 13 erwarteten Aufrufen; die Differenz waren 8 Absagen am
Nebenläufigkeitslimit, die im Transkript wie Starts aussehen. Nach der Trennung stimmen alle
drei Läufe exakt. Die Zahl der Absagen ist selbst eine Messgröße für die *beabsichtigte*
Parallelität.
- *Die Rückgabe eines Hintergrund-Subagenten ist eine Start-Quittung*, keine Befunde. Die
einheitlichen 1.093 Zeichen, die als „Ergebnis" protokolliert wurden, sind der Text „Async
agent launched successfully …". Als Ertragsmaß war das wertlos.
- *Subagenten-Transkripte* werden unter `<temp>\<session>\tasks\<agentId>.output` angelegt,
bleiben aber **leer** – geprüft an 33 Dateien aus zwei Läufen. Die bisherige Aussage, sie seien
nicht auswertbar persistiert, gilt damit unverändert.
- *Gültigkeitsprüfung ergänzt:* leeres Ergebnisverzeichnis oder Abbruchmeldung in `Stderr.log`
bedeutet Fehlmessung, unabhängig von `is_error`. Vorbeugend setzt der Ausführungsabschnitt
jetzt `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`.
**Ein Befund zur Belegquelle, den ein Agent selbst entdeckte.** `116d` hielt im Abschlusstext
fest, die Codebasis enthalte „keine `.git`-Historie und keine SQL-Migrationsskripte". Das trifft
zu und gilt für **alle** Läufe der Reihe: Seit die Codebasis als Dateien ins Arbeitsrepo
übernommen wurde, ist die Entwicklungshistorie der ERP-Suite nicht mehr erreichbar. Der Prompt
fordert Commit-Messages, Tickets und Release Notes in Schritt 2 ausdrücklich als Artefaktquelle –
diese Quelle steht der gesamten Versuchsreihe nicht zur Verfügung.
### Vorbereitung von Versuch 2 und 3
Beide Versuchsverzeichnisse wurden angelegt und nach den Vorgaben aus @tab_versuchskonfiguration
konfiguriert. Die Prompt-Kette folgt der dort festgelegten Ableitung **V1 → V2 → V3**.
| Artefakt | SHA-256 | Ableitung |
|---|---|---|
| `Versuch_02/01_Prompt.md` | `DCDC0E3F…B71BCF` | Prompt-Version 02-A: aus V1, angepasst an Agentendateien |
| `Versuch_02/01_Agents.json` | `6943EECD…AF1696` | acht Rollen |
| `Versuch_03/01_Prompt.md` | `E65A696C…6A06E1` | Prompt-Version 02-B: aus V2, angepasst an MCP-Server |
| `Versuch_03/01_Agents.json` | `EDCB8001…C49B55` | elf Rollen |
| `Versuch_03/01_MCP.json` | `F08840F7…5EE2DB` | fünf Werkzeugserver |
**Die Anpassung „an Agentendateien" ist ein einziger neuer Abschnitt: Arbeitsteilung.** Er nennt
keine Rolle und schreibt keinen Zuschnitt vor. Er schließt die Lücken, die entstehen, wenn nicht
mehr ein Bearbeiter die ganze Kette durchläuft: Prompt-Version 02 ordnet Schritte zeitlich,
vergibt fortlaufende IDs und verlangt am Ende einen Konsistenzcheck – bei verteilter Bearbeitung
ist nichts davon von selbst erfüllt. Die vier Kernsätze: ID-Bereiche vorab und
überschneidungsfrei; die Ebene ergibt sich aus dem Inhalt, nicht aus dem Bearbeiter; die
Mindestabdeckung gilt für das **gemeinsame** Inventar, nicht je Ausschnitt; der Konsistenzcheck
gilt dem zusammengeführten Ergebnis. Der Abschnitt ist bei einem einzelnen Bearbeiter
wirkungslos, sodass der Prompt auch für einen `solo`-Lauf gültig bleibt.
**Die Rollen sind aus den Messungen abgeleitet.** Drei getrennte Autoren je Ebene gegen die
Verteilungsstreuung (92,7 % StRS bis 89,4 % SwRS bei identischem Prompt); ein `faktenermittler`
nach dem Muster des erfolgreichsten `builtin`-Laufs samt Stichprobenverbot; ein neuer
`belegpruefer`, der zitierte Primärbelege öffnet und prüft, ob die Einstufung trägt; ein
`konsistenzpruefer`, der seinen Risikobegriff offenlegen muss, weil ein Lauf „alle 36 gedeckt"
meldete, während die maschinelle Prüfung 51 risikorelevante Anforderungen fand.
**Der ISO-29148-Orchestrator ist als konsolidierende, nicht delegierende Rolle umgesetzt.** Er
startet keine Subagenten und schreibt keine Anforderungen, sondern stellt her, was erst am
zusammengeführten Bestand entsteht: durchgängige Nummerierung samt mitgezogener Verweise,
beidseitig geschlossene Traceability, eine aus dem Gesamtbestand erzeugte Hypothesenliste und die
Abdeckungstabelle über das gemeinsame Inventar. Sein Schwerpunkt liegt auf den Nahtstellen
zwischen den Ausschnitten – dort sitzen die Fehler verteilter Bearbeitung. Ein **delegierender**
Orchestrator wäre die naheliegende, aber messtechnisch schlechtere Lösung gewesen: Er erzeugte
eine zweite Delegationsebene, deren Subagenten-Prompts nicht protokollierbar sind – bei `fb24`
blieben so 18 von 31 Aufrufen unerfassbar.
**Versuch 3 erhielt eine eigene Prompt-Version.** Prompt-Version 02-A schreibt „statische
Analyse, keine Ausführung" vor und begrenzt die Quellen auf das Arbeitsverzeichnis; ein live
gestartetes ERP verletzt beides. Geändert wurde nur das Nötige: Quellenbeschränkung erweitert,
Schritt 2b „Beobachtung am laufenden System" (ausdrücklich lesend), neue Belegklasse `LAUFZEIT`
als **nachrangig** gegenüber `PRIMÄR`, und Kennzeichnung fremden Wissens. Der Abschnitt
Arbeitsteilung wird aus V2 unverändert geerbt.
Fünf Werkzeugserver sind vorgesehen: `serena` (Symbol-Navigation), `mssql` (Datenbank-Inspektion,
read-only), `windows-mcp` und `playwright` (GUI-Beobachtung für Desktop-Client und Blazor-Portal)
sowie `context7`. Letzterer steht nicht in der Aufzählung der Arbeit und ist eine bewusst
hinzugenommene Erweiterung; er ist zugleich der einzige der fünf, der nicht lokal betrieben wird.
Zwei Server wurden **ausgeschlossen**: `memory`, weil er Zustand zwischen Läufen trägt und damit
die Unabhängigkeit der Wiederholungsmessungen zerstört, und `sequential-thinking`, weil er den
`--effort`-Parameter dupliziert – zwei Variablen gleichzeitig zu verändern war schon beim
Fable-Block der Fehler.
**Ein Blocker, gefunden bevor er einen Messlauf gekostet hat: `--safe-mode` ist mit V2 und V3
unvereinbar.** Das Flag schaltet ausweislich der CLI-Hilfe „MCP servers, custom commands and
agents" ab – also genau das, was beide Versuche untersuchen. Smoke-Test am 2026-08-26 (CLI
2.1.246, identischer Aufruf, nur das Flag variiert):
| Konfiguration | `spawned` | `by_type` |
|---|---:|---|
| mit `--safe-mode` | **0** | leer – „die Rollen sind nicht in der Agent-Registry registriert" |
| ohne `--safe-mode` | **2** | `{"modulinventar": 1, "konsistenzpruefer": 1}` |
Der Fehler wäre **still** geblieben: `--agents` hätte keine Wirkung gehabt, der Lauf wäre
fehlerfrei durchgelaufen und hätte Anforderungen erzeugt – nur ohne die Rollen, die den Versuch
ausmachen. Er wäre als V2-Lauf protokolliert worden und wäre in Wahrheit ein V1-Lauf gewesen.
Der Ersatz (Skill 7.0.0, MAJOR): kein `--safe-mode` in den Modi `custom` und bei MCP-Einsatz,
stattdessen `--strict-mcp-config` plus `--disallowedTools Skill WebSearch WebFetch SlashCommand`.
Gegengeprüft mit derselben Werkzeugabfrage: nichts vorgeladen, keine Skills, kein Webzugriff,
alle Rollen verfügbar. Bemerkenswert dabei: Ohne die Sperre lädt die CLI **16 global installierte
Skills** – darunter `code-review`, `security-review`, `run` und `init`. `--setting-sources ''`
unterdrückt sie nicht.
Der Ersatz deckt Plugins, Hooks und Output-Styles nicht ab. Auf der Versuchsmaschine ist davon
nichts konfiguriert – geprüft: `~/.claude/settings.json` enthält nur `model` und
`agentPushNotifEnabled`, kein `hooks`; kein `plugins`- und kein `output-styles`-Verzeichnis. Das
ist eine Eigenschaft der Umgebung, keine Garantie, weshalb der Skill vor jedem `custom`-Lauf eine
Umgebungsprüfung verlangt. **Läufe im Modus `custom` sind hinsichtlich der Isolation damit nicht
unmittelbar mit den `solo`- und `builtin`-Läufen vergleichbar**; der Unterschied ist benannt und
auf Plugins, Hooks und Output-Styles begrenzt.
Nebenbefund derselben Prüfung: In den User-Settings steht `model: opus[1m]`. Das ist die Quelle
der zwei dokumentierten Modellabweichungen bei Delegation – und `--safe-mode` hat sie nie
verhindert, wirkt hier also weder positiv noch negativ.
**Offene Punkte vor dem ersten Lauf beider Versuche:** `extract-subagenten.py` ist nicht gegen
`custom`-Agententypen geprüft; die Modellbedingung ist bei Delegation über `--model` allein nicht
herstellbar; für V3 sind die Serverversionen nicht gepinnt, und der Zustand des laufenden Systems
– Datenbankstand, Mandant, Datenart – ist als Teil des Untersuchungsgegenstands je Lauf zu
erfassen.
---
## 3. Entwicklung des Prompts
@@ -548,9 +734,22 @@ Belegqualität zu halten – dann wäre die Änderung zurückzunehmen.
## 8. 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.
**Teilweise geklärt:** Ob der Verbrauchssprung im Fable-Block vom Modell oder vom Effort kommt –
beide Variablen wechselten gleichzeitig. Die Zelle `claude-opus-5 / solo / max` (Iteration 3)
zeigt, dass der Effort allein Verbrauch **und** Belegdichte erheblich anhebt. Vollständig
isoliert wäre die Frage erst durch einen Opus-`high`-Block unter denselben Bedingungen –
gleicher Snapshot, gleiche Prompt-Version.
**Nicht messbar in der bisherigen Anlage:** Die Zelle `claude-opus-5 / builtin / high` ist
zweimal gescheitert (Zeitlimit, Session-Kontingent) und hat dabei 586 Mio. Tokens ohne Ergebnis
verbraucht. Vor einer Wiederholung ist zu entscheiden, ob die Kombination Opus + Delegation +
Prompt-Version 02 überhaupt sinnvoll messbar ist.
**Offen für Versuch 2 und 3:** Bei Delegation ist die Modellbedingung über `--model` allein nicht
herstellbar (zwei dokumentierte Fälle). `extract-subagenten.py` ist noch nicht gegen
`custom`-Agententypen geprüft. Für V3 fehlt im Skill ein Protokollfeld für die
MCP-Konfiguration, und der Zustand des laufenden Systems – Datenbankstand, Mandant, Datenart –
ist als Teil des Untersuchungsgegenstands je Lauf zu erfassen.
**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
@@ -0,0 +1,252 @@
# Analysebericht — Reverse Requirements Engineering c-entron ERP-Suite
**Lauf:** V1 Baseline (Prompt-only), Iteration 02 — 2026-08-26
**Untersuchungsgegenstand:** Gesamte Codebasis unter `C:\DEV\MasterArbeit\QuellCode\CentronERP` (nur lesend analysiert)
**Methode:** Statische Analyse entlang der RRE-Methodenkette (Schritte 0, 0b, 0c, 2–6); keine Ausführung des Systems.
## Überblick über den Untersuchungsgegenstand
Die c-entron ERP-Suite ist ein ERP-/Servicemanagement-System für IT-Systemhäuser (deutschsprachiger Markt) mit:
- **WPF-Desktop-Client** (`src\centron\Centron.WPF.UI`, ~29 Fachmodule) — „c-entron.NET"
- **Backend-Geschäftslogik** (`src\backend\Centron.BL`, >80 Fachbereiche) mit NHibernate-Datenzugriff (`Centron.DAO`, `Centron.Entities`)
- **REST-Webservice** (`src\webservice\Centron.Host`, `Centron.Controllers`, `Centron.WebServices.Core`) — der WPF-Client arbeitet wahlweise direkt gegen SQL Server oder über den Webservice (Dual-Architektur `BLLogic`/`WSLogic`, siehe `docs\getting-started\general-structure.md`)
- **Blazor-Web-App „c-entron Nexus"** (`src\nexus\CentronNexus`) mit ServiceBoard (Ticket-Arbeitsplatz), WebCart-Kundenportal, WebOffer, Office, DocumentSigning, ProductionOrderManagement sowie ein **Outlook-Add-In**
- **Externe API-Integrationen** (`src\apis`, `Centron.Api.docuFORM`): ITscope, COP, EGIS, Icecat, finAPI, GLS, Shipcloud, ebInterface, docuFORM
- **MSSQL-Datenbank**: Schema-Dump `SSMS_DB_SCHEMA.sql` mit 1.535 `CREATE TABLE`-Anweisungen (Legacy-Tabellen mit deutschen Namen, z. B. `AngKopf`/`AufKopf`/`RechKopf`, plus englischsprachige Views)
- **Entwicklerdokumentation** (`docs\`) — dient als KONTEXT-Beleg (u. a. `CentronRights.md`, `docs\reference\receipts\*`, `docs\reference\security\*`)
- **Deployment**: WiX-Installer (`deployment\`), Docker/Linux-Betrieb des Webservice (`docker\`), Azure-Pipelines (`azure\`)
- **Tests**: `tests\` (End-to-End, Integration, Playwright, Unit)
Umfang: ca. 15.554 C#-Dateien. Eine Original-Commit-Historie des ERP-Produkts liegt nicht vor (die Codebasis wurde als Snapshot in das Arbeitsrepository übernommen); Change-Historie stand daher als Artefaktquelle nicht zur Verfügung.
## Schritt 0 — Modulinventar
Bezugsgröße für Abdeckung und Mindestabdeckung. Pfade relativ zu `C:\DEV\MasterArbeit\QuellCode\CentronERP`. Kürzel: `UI` = `src\centron\Centron.WPF.UI\Modules`, `BL` = `src\backend\Centron.BL`. Spalte AP = Arbeitspaket der Analyse.
### A — Vertrieb & Belegwesen
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M01 | Belegwesen Verkauf (Angebot, Auftrag, Lieferschein, Rechnung, Gutschrift, Abholliste) | `BL\Sales\Receipts` (Offers, Orders, DeliveryLists, Invoices, CreditVouchers, PickupLists, DownPayment), `UI\Sales` | Kern-Belegkette des Verkaufs von Angebot bis Gutschrift inkl. Versionierung und Statusführung. | AP1 |
| M02 | Sonderpreise / Aktionspreise | `docs\reference\receipts\actionprice-system.md`, BL `Accounts` (Sonderpreise), `UI\Sales\SpecialArticleImport` | Kunden-/aktionsbezogene Preisfindung und Import von Sonderpreisen. | AP1 |
| M03 | Belegkonditionen | `UI\Administration\ReceiptConditions` | Verwaltung von Zahlungs-/Lieferkonditionen für Belege. | AP1 |
| M04 | Kassenbuch | `BL\Sales\CashBooks` | Führen von Kassenbüchern mit Ein-/Auszahlungen. | AP1 |
| M05 | Schweiz-Sonderlogik Belege | `BL\Sales\Receipts\Switzerland` | Länderspezifische Sonderbehandlung von Belegen für die Schweiz. | AP1 |
| M06 | Stundenzuschlagssätze | `BL\Sales\HourlySurchargeRatesBL`, `UI\Administration\HourlySurchargeRates` | Zuschlagssätze auf Stundenleistungen. | AP1 |
| M07 | Serienmails/Mailing-Aktionen | `UI\Sales\Mailing`, `BL\Mailings` | Serienmail-Kampagnen mit Vorlagen und Empfängerlisten. | AP9 |
### B — Verträge & wiederkehrende Abrechnung
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M08 | Vertragsverwaltung | `UI\Finances\Contracts`, `BL\Sales\Receipts\ContractLists`, `docs\reference\receipts\contracts-backend.md` | Verwaltung von Service-/Wartungsverträgen als Belegart (VertragKopf/VertragPos). | AP2 |
| M09 | Automatische Vertragsabrechnung | `UI\Finances\AutomatedBilling`, `docs\reference\receipts\Contract-Billing-RMM-Article-Logic.md` | Periodische Fakturierung von Verträgen inkl. RMM-Mengenlogik. | AP2 |
| M10 | Flatrate-Abrechnung | `UI\Finances\FlatrateBilling` | Pauschal-Abrechnung von Leistungen. | AP2 |
| M11 | Timer-/Zeitabrechnung | `UI\Finances\TimerBilling`, `UI\Helpdesk` (HelpdeskTimers) | Abrechnung erfasster Arbeitszeiten aus Tickets. | AP2 |
| M12 | Geräte-Klickabrechnung | `UI\Finances\DeviceClickCounter` | Abrechnung von Druck-/Kopierklicks je Gerät (Zählerstände). | AP2 |
| M13 | Vertragsauswertung | `UI\Finances\ContractEvaluation2`, `UI\Finances\ContractEvaluationOld` | Wirtschaftlichkeitsauswertung von Verträgen (neue und alte Implementierung). | AP2 |
| M14 | SEPA-Vertragsdaten | `UI\Administration\SepaContract` | Verwaltung von SEPA-Mandaten/Bankdaten für Vertragsabrechnung. | AP2 |
| M15 | Telekom-DIVE-Export | `UI\Modules\TelekomDive` | Export von Vertrags-/Abrechnungsdaten im Telekom-DIVE-Format. | AP2 |
### C — Finanzen & Buchhaltung
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M16 | Offene Posten (OPOS) | `UI\Finances\Opos` | Überwachung offener Forderungen/Verbindlichkeiten. | AP3 |
| M17 | Zahlungsverkehr (Ein-/Ausgangszahlungen) | `UI\Finances\Payments`, `BL\Finances\IncomingPayments`, `BL\Finances\Payments`, `UI\Warehousing\OutcomingPayments` | Erfassen und Zuordnen von Zahlungen zu Belegen. | AP3 |
| M18 | Mahnwesen | `UI\Finances\Dunning` | Mahnläufe über fällige offene Posten. | AP3 |
| M19 | Online-Banking | `UI\Modules\OnlineBanking`, `BL\Finances\OnlineBanking`, `src\apis\Centron.APIs.FinAPI` | Bankkonten-Anbindung, Umsatzabruf und Zahlungen über finAPI. | AP3 |
| M20 | Buchhaltungsexport / DATEV | `UI\DataExchange\BookKeeping`, `UI\DataExchange\DatevOnline2020` | Export von Buchungsdaten an Finanzbuchhaltung/DATEV. | AP3 |
| M21 | E-Rechnung (ZUGFeRD/XRechnung/ebInterface) | `docs\guides\development\xrechnung.md`, `docs\reference\zugferd-field-mapping.md`, `src\apis\Centron.Api.EbInterface`, Controller `ZugferdImportController.cs`, `BL\ReportEngine` (ZUGFeRD-PDF) | Erzeugung und Import elektronischer Rechnungen. | AP3 |
| M22 | Bankverbindungen (Stammdaten) | `BL\Accounting` | Verwaltung der Bankkonten von Kunden und eigener Firma. | AP3 |
| M23 | Zahler & Kostenstellen | `UI\Modules\PayersAndCostCenter` | Verwaltung abweichender Zahler und Kostenstellen. | AP3 |
| M24 | Gutschein-Verwaltung | `BL\VoucherManagement` | Gutscheine mit Barcode und Einlösestatus. | AP3 |
### D — Einkauf & Beschaffung
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M25 | Einkaufsbelege (Bestellung, Wareneingang, Eingangsrechnung, Lieferanten-Gutschrift) | `BL\Sales\Receipts\SupplierOrders`, `...\SupplierDeliveryLists`, `...\SupplierInvoices`, `...\SupplierCreditVouchers`, `UI\Purchasing` | Einkaufsseitige Belegkette gegenüber Lieferanten. | AP4 |
| M26 | EDI-Anbindung Distributoren | `BL\EDI`, `UI\Purchasing\EDIManagement`, `docs\reference\edi\*` | Elektronischer Belegaustausch mit Distributoren (ALSO, Alltron, Komsa, EGIS, Concerto, OpenTrans). | AP4 |
| M27 | Bestellvorschläge | `UI\Purchasing\OrderSuggestionList` | Ermittlung von Bestellvorschlägen aus Bedarf/Beständen. | AP4 |
| M28 | Reisekosten | `UI\Purchasing\TravelExpense` | Erfassung und Abrechnung von Reisekosten. | AP4 |
| M29 | Distributoren-Stammdaten | `BL\Buying` | Stammdaten der Großhändler/Distributoren. | AP4 |
| M30 | ITscope-Marktplatz | `src\apis\Centron.APIs.ITscopeDataAccess` | Produkt-/Preis-/Bestellzugriff auf den ITscope-Marktplatz. | AP4 |
| M31 | COP-Produktdatendienst | `src\apis\Centron.APIs.CopDataAccess` | SOAP-Zugriff auf Produkt-, Preis- und Lieferantendaten (COP). | AP4 |
| M32 | EGIS-Distributionsdienst | `src\apis\Centron.APIs.EgisDataAccess` | Artikelsuche, Preise/Verfügbarkeiten, Produktspezifikationen (EGIS). | AP4 |
| M33 | Icecat-Produktkatalog | `src\apis\Centron.APIs.IcecatDataAccess` | Anreicherung von Artikeln mit Icecat-Katalogdaten. | AP4 |
| M34 | TradePool-Import | `BL\TradePool` | XML-Import von Handels-/Marktplatzdaten. | AP4 |
### E — Artikel, Lager & Logistik
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M35 | Artikelstamm | `UI\Warehousing\ArticleManagement`, `UI\Warehousing\SearchArticle` | Verwaltung des Artikelstamms inkl. Suche. | AP5 |
| M36 | Artikelimport | `UI\Warehousing\ArticleImport` | Dateibasierter Import von Artikeldaten. | AP5 |
| M37 | Artikel-Nebenstammdaten (Einheiten, Warengruppen, Kontenrahmen) | `UI\Warehousing\ArticleUnitManagement`, `...\MaterialGroupManagement`, `...\AccountSystems` | Pflege von Einheiten, Warengruppen und Kontenzuordnungen. | AP5 |
| M38 | Lager & Inventur | `BL\Storage`, `UI\Warehousing\Inventory` | Lagerverwaltung und Inventurdurchführung. | AP5 |
| M39 | Kommissionierung | `UI\Warehousing\Commissioning`, `UI\Warehousing\Commissions` | Kommissionieren von Aufträgen. | AP5 |
| M40 | Barcode-Verwaltung | `UI\Warehousing\BarcodeManagement` | Barcodes für Artikel/Lagerprozesse. | AP5 |
| M41 | Versand/Logistik | `UI\Modules\Logistic`, `BL\Logistics` | Versandabwicklung und Versandarten-Konfiguration. | AP5 |
| M42 | GLS-Versand | `src\apis\Centron.Api.Gls` | Paketerstellung und Labeldruck über GLS. | AP5 |
| M43 | Shipcloud-Versand | `src\apis\Centron.Api.Shipcloud` | Multi-Carrier-Versand über Shipcloud inkl. Zolldaten. | AP5 |
| M44 | Lieferantensuche | `UI\Warehousing\SupplierSearch`, `BL\BusinessPartner` | Suche von Lieferanten zu Artikeln. | AP5 |
### F — Helpdesk & Service
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M45 | Helpdesk/Ticketsystem (Kern) | `UI\Helpdesk` (TicketList, TicketDetails, Dashboard), `BL\Modules`-übergreifende Helpdesk-BLs, `CentronRights.md` | Zentrales Ticketsystem für Servicefälle inkl. Rechten, Timern, Dashboard. | AP6 |
| M46 | Checklisten | `BL\CheckListArea`, `UI\Helpdesk\CentronChecklist` | Checklisten mit Positionen und Änderungsprotokoll. | AP6 |
| M47 | Erwartete Ereignisse | `BL\ExpectedEvents`, `UI\Helpdesk\ExpectedEvents`, `...\ExpectedEventsReporting` | Überwachung erwarteter Ereignisse/Fälligkeiten mit Auswertung. | AP6 |
| M48 | Aufgabenverwaltung (TaskManager) | `BL\TaskManager`, `UI\Helpdesk\TaskManagement`, `UI\Administration\TaskManagmentSettings` | Aufgaben mit konfigurierbaren Aktions-Handlern. | AP6 |
| M49 | Ticket-Projekte | `BL\TicketProjects` | Bündelung von Tickets zu Projekten inkl. Abhängigkeiten. | AP6 |
| M50 | Ticket-Prozessvorlagen / Ticket-Muster | `UI\Helpdesk\TicketProcessTemplates`, Controller `TicketPatternsController.cs` | Vorlagen für wiederkehrende Ticketprozesse. | AP6 |
| M51 | SelfCare-Formulare | `BL\SelfCare`, `UI\Helpdesk\SendSelfCareForm`, Controller `SelfCareFormsController.cs` | Self-Service-Formulare für Endkunden. | AP6 |
| M52 | Externes Helpdesk | `BL\ExternalHelpdesk` | Anbindung externer Ticketsysteme. | AP6 |
| M53 | Zeitregeln/Fristen | `BL\Time` | Konfigurierbare Zeitregeln (z. B. für Fristen und Jobs). | AP6 |
| M54 | Eskalationen | `UI\Administration\EscalationsSettings`, `src\webservice\Centron.Host` (Eskalationsdienst) | Eskalationsregeln für Tickets/Fristen. | AP6 |
| M55 | Umfragen | `UI\Modules\Survey` | Erstellen, Ausführen und Auswerten von Umfragen. | AP6 |
| M56 | RMA-Abwicklung | `UI\Modules\Rma`, `BL\CustomerArea\RmaBL.cs` | Rücksendeabwicklung an Lieferanten und Rückgabe an Kunden. | AP6 |
| M57 | IT-Planner | `BL\ItPlanner` | Kategorien virtueller Objekte für IT-Planungs-/Checklistenstruktur. | AP6 |
| M58 | DocuBoard / Asset-Management-Board | `BL\DocuBoard` | Board mit Partner-, Artikelzuordnungs- und AD-Benutzerausschlussverwaltung. | AP6 |
### G — CRM & Stammdaten
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M59 | Adress-/Kundenstamm | `BL\Accounts`, `BL\CustomerArea`, `BL\Sales\Customers` | Zentraler Kunden-/Adressstamm mit Ansprechpartnern, Branchen, Interessen. | AP8 |
| M60 | Kontaktaktivitäten / CRM | `UI\Finances\Crm`, `BL\CustomerArea` (Aktivitäten) | Dokumentation von Kundenkontakten und Aktivitäten. | AP8 |
| M61 | Kampagnen | `UI\Finances\Campaigns`, `BL\Accounts\Campaigns`, `BL\Sales\Marketing` | Marketing-Kampagnen mit Kundenzuordnung. | AP8 |
| M62 | Geräte/Assets beim Kunden | `BL\Devices`, `BL\Sales\CustomerAssets`, `BL\BusinessPartner\SupplierAssetBL.cs` | Verwaltung von Kundengeräten/Assets (inkl. getrennter Druckerstammblätter — Konsolidierungskandidat). | AP8 |
| M63 | Projekte | `BL\Projects`, `UI\Modules\ProjectManagement`, `UI\Finances\Projects` | Projektstammdaten und Projektsichten. | AP8 |
| M64 | Projektpreis-/Sonderpreisimport & Custom Gateways | `UI\Modules\ProjectPriceImport`, `BL\Gateway`, `UI\Sales\SpecialArticleToContractImport` | Import kundenspezifischer Preis-/Vertragsdaten über konfigurierbare Gateways. | AP11 |
| M65 | Länder & Bundesländer | `BL\CountryArea`, `UI\Administration\CountryManagement` | Stammdaten Länder/Bundesländer. | AP8 |
| M66 | Tags/Schlagwörter | `BL\Tags` | Schlagwortverwaltung und Zuordnung zu Objekten. | AP8 |
| M67 | Textbausteine | `BL\TextModuleArea`, `UI\Administration\TextBlockManagement` | Textbausteine inkl. Anrede-/Grußformel-Ersetzung. | AP8 |
| M68 | Mitarbeiterverwaltung | `BL\EmployeeArea`, `UI\Administration\EmployeeManagement` | Mitarbeiterstamm, App-Benutzer, Abteilungen, Urlaub, RFID, Teams. | AP8 |
| M69 | Stammdatenlisten | `UI\Finances\MasterDataLists`, Controller `MasterDataListsController.cs` | Pflege einfacher Auswahl-/Stammdatenlisten. | AP8 |
| M70 | Massenupdates | `BL\MassUpdate`, `UI\Modules\Massenupdates` | Massenänderungen über konfigurierbare Update-Jobs. | AP8 |
| M71 | Kundenindividuelle Zusatztabellen | `BL\Customizations` | Custom Tables mit Variablenersetzung. | AP8 |
| M72 | Externe Objektreferenzen | `BL\ObjectExternalReferences`, Controller `ObjectExternalReferencesController.cs` | Verknüpfung von c-entron-Objekten mit Fremdsystem-IDs. | AP8 |
| M73 | Produktmatrix | `BL\ProductMatrix`, `UI\Sales\ProductMatrix` | Produktkategorien-Matrix je Kunde. | AP8 |
| M74 | DSGVO | `UI\Administration\DSGVO` | Datenschutzfunktionen (Auskunft/Löschung). | AP7 |
### H — Kommunikation & Zusammenarbeit
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M75 | E-Mail-Versand/-Zugriff | `BL\Mail` (SMTP, Exchange/EWS, MS Graph), `UI\Administration\MailTemplates`, `docs\guides\development\create-mail-templates.md` | Mailversand über mehrere Protokolle inkl. Vorlagen und Signaturen. | AP9 |
| M76 | MailScanner | `BL\MailScanner` | Automatisches Auslesen von Postfächern zur Weiterverarbeitung (Ticket-/Belegerzeugung). | AP9 |
| M77 | Kalender & Exchange-Sync | `UI\Modules\Calendar`, `BL\Calendar`, `UI\Administration\MailAndCalender`, `docs\features\exchange-sync-bugprotokoll.md` | Terminverwaltung und Synchronisation mit Exchange. | AP9 |
| M78 | Terminanfragen | `BL\AppointmentRequests` | Terminanfragen mit Zu-/Absagen. | AP9 |
| M79 | Outlook-Add-In | `src\nexus\CentronNexus.OutlookAddIn`, `BL\Outlook` | Kontextanzeige von Kunde/Belegen/Aktivitäten zur aktuellen Mail. | AP9 |
| M80 | Telefonie (TAPI) | `BL\Tapi`, `docs\reference\architecture\tapi.md`, `UI\Administration\PhoneSettings` | Anruferfassung und -auswertung über TAPI. | AP9 |
| M81 | Interner Chat | `BL\Chats` | Interner Chat mit Objektbezug. | AP9 |
| M82 | Benachrichtigungen | `BL\Notifications`, `BL\NexusNotifications` | Systemweite und Realtime-Benachrichtigungen (SignalR). | AP9 |
| M83 | Soziale Netzwerke | `BL\SocialMedia` | Zuordnung sozialer Netzwerke zu Personen. | AP9 |
| M84 | Videoportal | `BL\VideoPortal` | Zuordnung von Videoinhalten zu Objekten. | AP9 |
| M85 | Signierte Web-Links | `BL\WebLinks` | Signierte Links mit hinterlegten Aktionen. | AP9 |
| M86 | Kurz-URLs | `BL\Urls` | Einfache Objekt-/Kurz-URLs. | AP9 |
### I — Auswertung & persönlicher Arbeitsbereich
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M87 | Statistiken | `UI\Modules\Statistics`, `BL\Statistics` | Umsatz-/Kennzahlenauswertungen. | AP12 |
| M88 | Reports/Formulardruck | `BL\ReportEngine` (FastReport), `BL\Reporting`, `UI\Modules\Reports`, `UI\Administration\ReportServer` | Formular-/Reporterzeugung inkl. PDF und ReportServer. | AP11 |
| M89 | Dashboard | `UI\Modules\Dashboard` | Übergreifendes Kennzahlen-Dashboard. | AP12 |
| M90 | Volltextsuche | `BL\IndexSearch` (Lucene) | Volltextindizierung und -suche über Geschäftsobjekte. | AP11 |
| M91 | KI-Funktionen | `UI\Modules\ArtificialIntelligence`, `BL\ArtificialIntelligence`, Controller `ArtificialIntelligenceChatsController.cs` | KI-gestützte Chats/Assistenz. | AP12 |
| M92 | MyCentron/MyDay/ToDo/QuickNotes | `BL\MyCentron`, `BL\MyDay`, `BL\ToDoArea`, `UI\Modules\MyCentron` | Persönlicher Arbeitsbereich: Dashboard, Tagesübersicht, To-dos, Notizen. | AP12 |
### J — Sicherheit & Administration
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M93 | Benutzerrechte | `CentronRights.md`, `docs\guides\development\check-userrights.md`, `UI\Administration\RightsManagement`, UserRightsConst | Feingranulare Rechteverwaltung inkl. einschränkender Rechte (nur eigene / eigene Filiale). | AP7 |
| M94 | Authentifizierung & Login | `docs\reference\security\anmelden-mit-microsoft-technische-anleitung.md`, `src\webservice\Centron.Controllers\Controllers\...\JwtAuthController.cs`, `AuthConfigurationController.cs`, AccessTokens | Anmeldung am Client/Webservice inkl. „Anmelden mit Microsoft", JWT, Access-Tokens. | AP7 |
| M95 | Zwei-Faktor-Authentifizierung | `BL\TwoFactorAuthenticator`, Controller `TwoFactorAuthController.cs` | TOTP-Registrierung und -Prüfung. | AP7 |
| M96 | Passwortmanager | `BL\PasswordManagementArea`, `BL\PasswordManager`, `UI\Modules\PasswordManager` | Verwaltung von Kundenpasswörtern inkl. Zugriffs-/Änderungsprotokoll. | AP7 |
| M97 | Lizenzierung | `docs\reference\security\licensing-system.md`, `LicenseGuids.cs`, `ApplicationKind.cs`, Controller `LicenseController.cs` | GUID-basierte Lizenzen mit Anzahl/Gültigkeit je Feature und Applikation. | AP7 |
| M98 | Mandanten & Filialen | `UI\Administration\MandatorManagement`, Branch-Logik | Mandanten- und Filialverwaltung. | AP7 |
| M99 | PDF-Signatur | `BL\Security\PdfSigningBL.cs`, `UI\Administration\PdfSigning` | Digitale Signatur von PDF-Dokumenten mit Zertifikaten. | AP7 |
| M100 | Einstellungsverwaltung | `docs\guides\development\settings-management.md`, `UI\Administration\Settings` | Zentrale, hierarchische Verwaltung von System-/Benutzereinstellungen. | AP7 |
| M101 | Änderungsverfolgung/Audit | `BL\ChangeTracking` | Historisierung von Importen und Datenänderungen. | AP7 |
| M102 | Telemetrie | `BL\Telemetry` | Erfassung von Nutzungsdaten. | AP7 |
| M103 | Log-Viewer/Protokollierung | `UI\Administration\LogViewer` | Einsehen von Anwendungsprotokollen. | AP7 |
| M104 | Admin-Werkzeuge (Cache, Profiling, SqlManagers, CentronConfigDb, Connections) | `UI\Administration\Cache`, `...\Profiling`, `...\SqlManagers`, `...\CentronConfigDb`, `...\Connections` | Technische Administrationswerkzeuge des Clients. | AP7 |
| M105 | Modul-Registry & Favoriten | `BL\Modules` | Registrierung der Anwendungsmodule, Kategorien, Favoriten. | AP7 |
| M106 | Systemtabelle/ID-Vergabe | `BL\SystemArea\SystemTableI3DBL.cs` | Zentrale Systemtabelle mit ID-Vergabe (I3D). | AP11 |
### K — Web-Plattform & Schnittstellen
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M107 | Webservice-Server | `src\webservice\Centron.Host`, `src\webservice\Centron.Controllers`, `BL\WebServices` (Fassade, 464 Dateien), `docs\guides\services\add-webservice-methods.md` | REST-/Webservice-Schicht über der Geschäftslogik inkl. Hintergrunddienste. | AP10 |
| M108 | Webservice-Client-Kern | `src\webservice\Centron.WebServices.Core` | Transport, Serialisierung, JWT-Auth, HTTP-Clients für Client-Zugriffe. | AP10 |
| M109 | ConnectionManager | `src\webservice\c-entron.misc.ConnectionManager` | Admin-Tool für Verbindungen, Lizenzen, Hardware-ID, 2FA-Test. | AP10 |
| M110 | Nexus ServiceBoard | `src\nexus\CentronNexus\ServiceBoard`, `BL\NexusTicketViews`, `BL\CentronNexus` | Web-Ticket-Arbeitsplatz (Kanban, Scheduler, MyDay, Statistiken). | AP10 |
| M111 | Nexus WebCart/Kundenportal | `src\nexus\CentronNexus\WebCart`, `README.md` (WebCart), `UI\Administration\WebCart` | Webshop für Endkunden auf Basis von Web-Accounts und Sonderpreisen. | AP10 |
| M112 | Nexus WebOffer/Belegansicht | `src\nexus\CentronNexus\WebOffer` | Web-Ansicht von Belegen mit PDF-Vorschau. | AP10 |
| M113 | Nexus Office & DocumentSigning | `src\nexus\CentronNexus\Office`, `...\DocumentSigning` | Geteilte Dokumente, Freigaben und digitale Unterschrift. | AP10 |
| M114 | Nexus ProductionOrderManagement | `src\nexus\CentronNexus\ProductionOrderManagement` | Web-Verwaltung von Fertigungsaufträgen. | AP10 |
| M115 | Nexus Management/Settings/Shared | `src\nexus\CentronNexus\Management`, `...\Settings`, `...\Shared` | Web-Administration (TaskManagement, TicketPatterns, WebAccounts), Auth, Layout. | AP10 |
| M116 | Mobile-App-Backend | `BL\Mobile` | Datenversorgung der mobilen App. | AP10 |
| M117 | WebSuite (Alt-Web) | `BL\WebSuite` | Konfiguration der älteren Web-Suite. | AP10 |
| M118 | Webservice-Versionsabgleich | `BL\WebVersion` | Versionsermittlung/-abgleich zwischen Client und Webservice. | AP10 |
| M119 | RMM-/DocBee-Integrationen | `BL\Integrations`, Controller `RmmController.cs`, `DocBeeConnectorConfigurationController.cs`, `RmmConnectionSettingsController.cs`, `UI\DataExchange` (RMM) | Anbindung von RMM-Systemen und DocBee. | AP12 |
| M120 | RiverDivo-Schnittstelle | `BL\RiverDivo` | Webservice-Schnittstelle zum Riverbird/Divo-System. | AP12 |
| M121 | cPra-Anbindung | `BL\CPra` | Login/Konfiguration für das externe System „cPra". | AP12 |
| M122 | docuFORM-Anbindung | `Centron.Api.docuFORM`, Controller `DocuFormApiSettingsController.cs`, `UI\DataExchange` (DocSync) | REST-Anbindung docuFORM (OAuth, Kundenanlage, Deployments). | AP12 |
| M123 | Externe Tools | `BL\ExternalToolsBL`, `UI\Modules\ExternalTool`, `UI\Administration\ExternalTools` | Konfigurierbarer Aufruf externer Programme mit Variablenersetzung. | AP12 |
| M124 | Import-/Export-Framework (DataExchange) | `UI\Modules\DataExchange` (Assistenten, Konnektoren) | Generische Import-/Export-Assistenten und Konnektoren. | AP11 |
| M125 | Prozesse (generisch) | `BL\Processes` | Generische Vorgangs-/Prozessobjekte an beliebigen Objekten. | AP11 |
| M126 | Transaktionen | `BL\Transactions` | Verwaltung/Abfrage von Transaktionen. | AP11 |
### L — Produktion & Sonstige Fachmodule
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M127 | Produktion/Fertigungsaufträge | `UI\Modules\Production` (ProductionOrder, MachineManagement, Settings), `BL\Production` | Fertigungsaufträge und Maschinenverwaltung. | AP12 |
| M128 | Produkt-Lifecycle-Management | `UI\Modules\PLM`, `UI\Finances\ProductLifecycleManagement` | Produktfamilien/-gruppen mit Lebenszyklusinformationen. | AP12 |
| M129 | Qualitätsmanagement | `UI\Modules\QM` | QM-Einstellungen (Beleg-/Asset-Gründe). | AP12 |
| M130 | Dokumentation an Objekten | `BL\DocumentationArea`, `BL\Sales\DocumentationWizardArea` | Dokumentationseinträge zu Objekten inkl. Rechteprüfung. | AP12 |
### M — Plattform, Infrastruktur & Betrieb
| Nr | Modul | Pfad(e) | Fachliche Aufgabe | AP |
|---|---|---|---|---|
| M131 | WPF-Client-Rahmen | `src\centron\Centron.WPF.UI` (Start, Layout, Dialogs, Wizards), `src\centron\Centron.WPF.UI.Extension`, `src\shared\Centron.Controls` | Anwendungsrahmen: Start/Login, Modul-Hosting, MVVM, Steuerelemente. | AP11 |
| M132 | Lokalisierung | `docs\guides\ui\localization.md`, `LocalizedStrings.resx`/`.en.resx` | Zweisprachigkeit Deutsch (Standard)/Englisch. | AP11 |
| M133 | Datenzugriff & O/R-Mapping | `src\backend\Centron.DAO`, `src\backend\Centron.Entities`, `BL\Start` | NHibernate-basierter Datenzugriff, Entities, Mapping. | AP11 |
| M134 | Datenbankschema & Skript-System | `SSMS_DB_SCHEMA.sql`, `docs\guides\database\create-scripts.md`, `docs\reference\database\script-rules.md`, `scripts\` | 1.535 Tabellen, Views, Constraints; versionierte Migrationsskripte. | AP11 |
| M135 | Hintergrunddienste | `src\webservice\Centron.Host` (HostedServices), `docs\Background Service\DataQualityService.md` | Geplante Dienste: EDI-Download, Exchange-Sync, Indexierung, Eskalation, Preisupdates, Datenqualität. | AP10 |
| M136 | Deployment/Installer | `deployment\` (WiX), `azure\`, `version.json` | MSI-Installer für Client und Webservice, Build-Pipelines. | AP11 |
| M137 | Docker-/Linux-Betrieb | `docker\`, `docs\guides\services\web-service-on-linux.md` | Containerisierter Betrieb des Webservice. | AP11 |
| M138 | Teststrategie | `tests\` (EndToEnd, Integration, Playwright), `docs\guides\development\end-to-end-testing.md` | Automatisierte Regressions-/E2E-Tests. | AP11 |
| M139 | Gemeinsame Basisbibliothek | `src\shared\Centron.Core`, `src\backend\Centron.Common`, `src\backend\Centron.Interfaces`, `src\backend\Centron.Gateway` | Technische Querschnittsfunktionen (Guard, TOTP, Result-Pattern, DTOs). | AP11 |
**Inventarstand:** 139 Module/Komponenten. Das Inventar darf ergänzt, aber nicht gekürzt werden.
## Arbeitspakete der Analyse (Schritt 0b/0c)
| AP | Themenfeld | ID-Bereich (je Ebene) | Risikofokus |
|---|---|---|---|
| AP1 | Belegwesen Verkauf | 100–299 | Fakturierung ✔ |
| AP2 | Verträge & wiederkehrende Abrechnung | 300–499 | Fakturierung ✔ |
| AP3 | Finanzen & Buchhaltung | 500–699 | Abrechnung/Zahlung ✔ |
| AP4 | Einkauf & Beschaffung | 700–899 | — |
| AP5 | Artikel/Lager/Logistik | 900–1099 | — |
| AP6 | Helpdesk & Service | 1100–1299 | Berechtigungen (Ticketrechte) ✔ |
| AP7 | Sicherheit & Administration | 1300–1499 | Sicherheit/Berechtigungen ✔ |
| AP8 | CRM & Stammdaten | 1500–1699 | — |
| AP9 | Kommunikation | 1700–1899 | — |
| AP10 | Web-Plattform & Webservice | 1900–2099 | Auth am Webservice ✔ |
| AP11 | Plattform & Infrastruktur | 2100–2299 | — |
| AP12 | Übrige Fachmodule & Integrationen | 2300–2499 | — |
Mindestabdeckung (Schritt 0b): Jedes der 139 Module erhält mindestens eine Anforderung oder wird mit Begründung als `nicht analysiert` geführt. Vertiefung (Schritt 0c) erfolgt in AP1–AP3, AP6, AP7 und AP10 (Sicherheits-, Abrechnungs- und Berechtigungslogik).
*Die Abschnitte Abdeckungstabelle, Konsistenzcheck und Selbstbewertung werden nach Abschluss der Analyse ergänzt (siehe unten).*
@@ -0,0 +1,89 @@
# Messprotokoll – Versuch 01 (V1b Baseline mit werkzeugeigenen Agenten) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf brach mit `is_error: true` und HTTP 429 ab: „You've hit your session limit ·
> resets 10:50pm (Europe/Berlin)". Erzeugt wurden **1 von sieben** geforderten Ergebnisdateien; der Lauf brach mitten in der Bearbeitung ab. Verbraucht wurden
> bis zum Abbruch **77.815.316 Tokens**.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T20:00:11.2795634+02:00
- **Endzeit:** 2026-08-26T20:30:04.2067421+02:00
- **Dauer gesamt:** 00:07:4x — bis zum Kontingentabbruch
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **Modell (angefordert):** `claude-fable-5`
- **Modelle (tatsächlich eingesetzt):** `claude-fable-5` 77.433.773 (99.51 %), `claude-opus-5[1m]` 374.562 (0.48 %), `claude-haiku-4-5-20251001` 6.981 (0.01 %)
- **Kontrolle Modell:** **verletzt** – nicht angefordertes Modell `claude-opus-5[1m]` mit 374.562 Tokens (0.48 %)
- **Effort:** `high`
- **Agentenmodus:** `builtin` (V1b)
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **Hintergrund-Wartezeit:** `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`
- **Parallele Läufe:** **ja** – alle vier Läufe der Welle liefen gleichzeitig
- **Subagenten:** 13 gestartet (1 × `Explore`, 12 × `general-purpose`), `max_depth` = 1
## Verbrauch
| Messgröße | `claude-fable-5` | `claude-opus-5[1m]` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|---:|
| Input-Tokens | 1.426 | 20 | 6.961 | 8.407 |
| Output-Tokens | 1.037.386 | 15.803 | 20 | 1.053.209 |
| Cache-Write-Tokens | 4.150.505 | 52.132 | 0 | 4.202.637 |
| Cache-Read-Tokens | 72.244.456 | 306.607 | 0 | 72.551.063 |
| **Tokens gesamt** | **77.433.773** | **374.562** | **6.981** | **77.815.316** |
**Tokens gesamt: 77.815.316** — real angefallen und deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Der Lauf brach vor Abschluss ab. Die vorhandenen Dateien sind ein **Teilbestand** und mit vollständigen Läufen nicht vergleichbar; eine Auswertung unterbleibt deshalb.
## Ergebnis
- **Gültigkeit:** **Fehlmessung** – API-Abbruch (HTTP 429, Session-Kontingent); nur 1 von sieben Artefakten erzeugt
- **Status:** `is_error` = true, `terminal_reason` = `api_error`, `api_error_status` = 429
- **Session-ID:** `d77bf9b3-7a4d-4620-861f-28861a420996`
- **Turns:** 44
- **Permission-Denials:** 14
- **Erzeugte Dateien:** 1 von sieben geforderten Artefakten:
| Datei | Größe |
|---|---:|
| `Analysebericht.md` | 26.963 B |
Es fehlen: `StRS.md`, `SyRS.md`, `SwRS.md`, `Traceability.md`, `Hypothesen.md`, `Glossar.md`
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „You've hit your session limit · resets 10:50pm (Europe/Berlin)"
## Anmerkungen/Auffälligkeiten
**1. Kontingentabbruch, nicht Laufversagen.** Vier Läufe wurden am 26.08. um 19:59 gleichzeitig
gestartet; alle vier liefen in dieselbe Grenze. Zusammen hatten sie zu diesem Zeitpunkt
297,4 Mio. Tokens verbraucht, davon allein 204,4 Mio. im Lauf `45dd`. Die Parallelität von vier
Läufen – darunter einer mit extremer Delegation – hat das Kontingent gerissen.
**2. Konsequenz für den Versuchsaufbau:** Die verbleibenden Zellen werden **seriell** gefahren.
Der erste serielle Lauf danach (`opus-5/solo/high`, `2269`) lief mit 38,1 Mio. Tokens sauber durch.
**3. Die Modellverletzung aus Iteration 1 ist reproduziert.** `modelUsage` weist neben
`claude-fable-5` auch **`claude-opus-5[1m]`** aus. Derselbe Befund war in Iteration 1 unter
Prompt-Version 01 und ohne DB-Schema aufgetreten; damit ist aus einem Einzelfall ein belegtes
Muster geworden: **Fable wird bei Delegation nicht an die Subagenten durchgereicht**, Sonnet und
Opus dagegen schon. Ursache ist die Sitzungsvorgabe `model: opus[1m]` in
`~/.claude/settings.json`; `--safe-mode` verhindert das nicht.
Die Gegenprobe im selben Block bestätigt die Abgrenzung: Der Lauf `77a1` mit Fable im Modus
`solo` weist ausschließlich `claude-fable-5` plus Haiku aus. **Nicht das Modell ist das Problem,
sondern Fable in Kombination mit Delegation.**
**4. Die Zelle bleibt unbelegt.** Ein gültiger Lauf für `fable-5/builtin/high` steht aus. Er wäre
allerdings von vornherein als bedingungsverletzt zu führen, solange die Subagenten auf einem
nicht angeforderten Modell laufen.
@@ -0,0 +1,178 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien, das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis sowie die werkzeugeigenen Subagenten.
Nicht verfügbar sind: spezialisierte Agentenrollen aus Konfigurationsdateien, externe
Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-fable-5\builtin\high\02_Lauf_2026-08-26_195958_v7.0.0-d694\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1,195 @@
# Analysebericht – Reverse Requirements Engineering c-entron ERP-Suite
Lauf: 02_Lauf_2026-08-26_195958_v7.0.0-77a1 (Baseline Prompt-only, Iteration 02)
Untersuchungsgegenstand: gesamte Codebasis `C:\DEV\MasterArbeit\QuellCode\CentronERP` (nur lesend).
Dieser Bericht enthält:
1. Modulinventar (Schritt 0 – erstellt **vor** der ersten Anforderung)
2. Abdeckungstabelle (wird nach Abschluss der Anforderungserhebung gefüllt)
3. Konsistenzcheck
4. Liste der risikorelevanten Anforderungen mit Belegsituation
5. Selbstbewertung
---
## 1. Modulinventar (Schritt 0)
Grundlage: Verzeichnisstruktur `src/` (backend/centron/nexus/shared/webservice/apis), `docs/`,
`deployment/`, `docker/`, `scripts/`, `tests/` sowie Wurzeldateien (`SSMS_DB_SCHEMA.sql`,
`CentronRights.md`). Die fachlichen Module wurden primär aus den Fachordnern von
`src/backend/Centron.BL` (Geschäftslogik), den UI-Modulen `src/centron/Centron.WPF.UI/Modules`
und den Web-Bereichen `src/nexus/CentronNexus` abgeleitet. Pfade sind relativ zum
Arbeitsverzeichnis. Das Inventar darf ergänzt, aber nicht gekürzt werden.
| Nr. | Modul / Komponente | Pfad | Fachliche Aufgabe (1 Satz) |
|---|---|---|---|
| M001 | Belegwesen-Kern | src/backend/Centron.BL/Sales/Receipts (ReceiptBL.cs, SpecificLogics.cs) | Gemeinsame Logik aller Belegarten: Laden, Speichern, Statusführung, Nummernvergabe, Preisberechnung, Versionierung. |
| M002 | Angebote | src/backend/Centron.BL/Sales/Receipts/Offers | Erstellung und Verwaltung von Kundenangeboten (AngKopf/AngPos). |
| M003 | Aufträge | src/backend/Centron.BL/Sales/Receipts/Orders | Verwaltung von Kundenaufträgen (AufKopf/AufPos) inkl. Überführung in Folgebelege. |
| M004 | Lieferscheine | src/backend/Centron.BL/Sales/Receipts/DeliveryLists | Verwaltung von Lieferscheinen (LiefKopf/LiefPos). |
| M005 | Rechnungen | src/backend/Centron.BL/Sales/Receipts/Invoices | Verwaltung von Ausgangsrechnungen (RechKopf/RechPos). |
| M006 | Gutschriften | src/backend/Centron.BL/Sales/Receipts/CreditVouchers | Verwaltung von Gutschriften (GutKopf/GutPos). |
| M007 | Abholscheine | src/backend/Centron.BL/Sales/Receipts/PickupLists, .../PickUps | Verwaltung von Abholscheinen (AbholKopf/AbholPos). |
| M008 | Verträge | src/backend/Centron.BL/Sales/Receipts/ContractLists, .../LeasingAndService | Verwaltung von Service-/Wartungsverträgen (VertragKopf/VertragPos) mit Laufzeiten, Kontingenten und Gerätelisten. |
| M009 | Vertragsabrechnung | src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura | Automatische Fakturierung von Verträgen, Aufträgen, Lieferscheinen und Tickets (Intervalle, Kontingente, Klickzähler). |
| M010 | Mahnwesen | src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning | Mahnläufe über offene Rechnungen mit Mahnstufen, Mahnstopp und Mahnreports. |
| M011 | Offene Posten (OPOS) | src/backend/Centron.BL/Sales/Receipts/Invoices/Opos | Verwaltung und Auswertung offener Posten. |
| M012 | Anzahlungen | src/backend/Centron.BL/Sales/Receipts/DownPayment | Abbildung von Anzahlungen im Belegfluss. |
| M013 | Warenkorb & Freigabewesen | src/backend/Centron.BL/Sales/Receipts/ReceiptCartBL.cs, ReceiptCartReleaseSystemBL.cs | Warenkörbe von Web-Accounts mit mehrstufigem Prüf-/Freigabe-/Bestellprozess. |
| M014 | Lieferantenbelege | src/backend/Centron.BL/Sales/Receipts/Supplier* | Bestellungen, Wareneingänge, Eingangsrechnungen und Lieferantengutschriften. |
| M015 | Provisionen | src/backend/Centron.BL/Sales/Receipts/ReceiptProvision*.cs | Provisionsschemata, -ziele und -stufen für Vertriebsmitarbeiter. |
| M016 | Kassenbuch | src/backend/Centron.BL/Sales/CashBooks | Kassenbücher mit Buchungen und Belegen je Filiale. |
| M017 | Preisfindung & Kalkulation | src/backend/Centron.BL/Sales/Receipts/ReceiptPriceHelperBL.cs; Centron.BL/Warehousing/ActionPriceBL.cs, ArticleVolumePricesBL.cs; Sales/Support/CustomerSpecialArticleBL.cs | Berechnung von Positions-/Belegpreisen, MwSt., Rabatten, Aktions-, Staffel- und Sonderpreisen. |
| M018 | Schweiz-Sonderlogik | src/backend/Centron.BL/Sales/Receipts/Switzerland | Landesspezifische Sonderbehandlung für Schweizer Belege. |
| M019 | Belegvorlagen | src/backend/Centron.BL/Sales/Receipts/ReceiptTemplateBL.cs | Belegvorlagen über einen definierten Vorlagen-Kunden. |
| M020 | Marketing | src/backend/Centron.BL/Sales/Marketing | Marketingaktionen/-kampagnen im Vertriebsumfeld. |
| M021 | CRM-Projekte | src/backend/Centron.BL/Sales/Customers/CrmProjects | Vertriebschancen/CRM-Projekte zu Kunden. |
| M022 | Kundenstamm (Alt-Struktur) | src/backend/Centron.BL/Sales/Customers | Verwaltung der Kunden (Tabelle Kunden) mit Kreditlimit, Sperren und Zuordnungen. |
| M023 | Stundensatz-Zuschläge | src/backend/Centron.BL/Sales/HourlySurchargeRatesBL | Zuschlagsätze auf Stundensätze (z. B. nach Zeit/Art). |
| M024 | Dokumentations-Assistent | src/backend/Centron.BL/Sales/DocumentationWizardArea | Geführte Erstellung von Dokumentationen. |
| M025 | Helpdesk/Ticketsystem | src/backend/Centron.BL/Sales/Support (HelpdeskBL.cs u. a.) | Störungs-/Serviceticketverwaltung mit Status, Typen, Kategorien, Prioritäten, Historie und Mailversand. |
| M026 | Ticket-Zeiterfassung | src/backend/Centron.BL/Sales/Support/HelpdeskTimer*.cs | Erfassung, Signatur, Verschiebung und Abrechnung von Arbeitszeiten auf Tickets. |
| M027 | Ticket-Eskalation | src/backend/Centron.BL/Sales/Support/Escalation | Eskalationsregeln und -überwachung für Tickets. |
| M028 | Ticketvorlagen/Prozesse (C-FLOW) | src/backend/Centron.BL/Sales/Support/TicketProcess, HelpdeskPatternBL.cs, HelpdeskCreationTemplateBL.cs | Ticketvorlagen und automatische Tickerzeugung nach Vorlagen/Prozessen. |
| M029 | Ticketprojekte | src/backend/Centron.BL/TicketProjects; Sales/Support/TicketProject*.cs | Bündelung von Tickets zu Projekten mit Aufgaben und Abhängigkeiten. |
| M030 | Externe Helpdesks | src/backend/Centron.BL/ExternalHelpdesk | Konfiguration der Kopplung zu Fremd-Ticketsystemen. |
| M031 | Support-Level | src/backend/Centron.BL/Sales/Support/SupportLevelBL.cs | Verwaltung von Support-Leveln (z. B. SLA-Stufen) für Kunden/Tickets. |
| M032 | Kundengeräte/Assets | src/backend/Centron.BL/Sales/CustomerAssets; Centron.BL/Devices | Verwaltung der beim Kunden befindlichen Geräte/Assets inkl. Stammdatenlisten und Historie. |
| M033 | RMA | src/backend/Centron.BL/CustomerArea/RmaBL.cs; UI: Modules/Rma | Reklamations-/Rücksendeabwicklung mit Artikeln und Historie. |
| M034 | Checklisten | src/backend/Centron.BL/CheckListArea | Checklistenvorlagen und Checklisten an Objekten (v. a. Tickets). |
| M035 | Umfragen | src/centron/Centron.WPF.UI/Modules/Survey; BL: HelpdeskSurveyProcess (Sales/Support) | Erstellung und Versand von Kundenumfragen, u. a. beim Ticketabschluss. |
| M036 | TaskManager | src/backend/Centron.BL/TaskManager | Zeit-/ereignisgesteuerte Aufgaben (Tasks) mit Aktionen und Ausführungsprotokoll. |
| M037 | Nexus-Ticketansichten | src/backend/Centron.BL/NexusTicketViews | Konfigurierbare Ticket-Listenansichten für den Webclient. |
| M038 | Einkauf/Bestellwesen | src/backend/Centron.BL/Purchasing, Centron.BL/Buying | Lieferantenbestellungen je Filiale und Einkaufsunterstützung. |
| M039 | Lager/Bestandsführung | src/backend/Centron.BL/Logistics/Warehousing/StockBL.cs; Logistics/LogisticSettings | Verwaltung von Lagern, Lagerorten, Umbuchungen und Bestandslogik. |
| M040 | Inventur | src/backend/Centron.BL/Storage (StorageBL.cs, InventoryArticlePool.cs) | Inventurdurchführung mit Zähllisten und Bestandsabgleich. |
| M041 | Artikelstamm | src/backend/Centron.BL/Warehousing (ArticleBL.cs u. a.) | Verwaltung der Artikel (ARTIK) mit Einheiten, Varianten, Logs und Sonderartikeln. |
| M042 | Barcode | src/backend/Centron.BL/Warehousing/Barcode*.cs | Barcodeverwaltung inkl. Historie und Bedingungen. |
| M043 | Produktion | src/backend/Centron.BL/Production | Fertigungsaufträge mit Positionen und Protokoll. |
| M044 | TradePool | src/backend/Centron.BL/TradePool | Import/Verwaltung von Handelsware-Pools (Distributorenartikel) und Kundenzuordnung. |
| M045 | Produktmatrix | src/backend/Centron.BL/ProductMatrix | Bewertungsmatrix Kunde × Produktkategorie (IT-Portfolio-Beratung). |
| M046 | Produktlebenszyklus | src/backend/Centron.BL/Finances/ProductLifecycleBL.cs | Lebenszyklusdaten zu Produkten (z. B. EOL) für Beratung/Planung. |
| M047 | Konten-/Adressstamm (Accounts) | src/backend/Centron.BL/Accounts | Neuer vereinheitlichter Konten-/Adress-/Kontaktstamm (Accounts) mit Kunden-/Lieferantenrollen. |
| M048 | Lieferantenstamm | src/backend/Centron.BL/BusinessPartner | Suche/Verwaltung von Lieferanten und Lieferanten-Assets. |
| M049 | Mitarbeiter/Personal | src/backend/Centron.BL/EmployeeArea | Mitarbeiterstamm mit Abteilungen, Urlaub, RFID-Token, Benutzerzuordnung. |
| M050 | Länder/Bundesländer | src/backend/Centron.BL/CountryArea | Länder- und Bundeslandstamm inkl. Währungsangaben. |
| M051 | Kostenstellen/Kostenträger | src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter; DB: Kostenstellen, Kostentraeger | Verwaltung von Kostenstellen und Kostenträgern. |
| M052 | CRM-Kataloge | src/backend/Centron.BL/CustomerArea (BusinessLineBL, InterestBL, ProductBL, ContactActivityBL, ContactDepartmentBL) | Katalogdaten für CRM: Branchen, Interessen, Produkte, Kontaktaktivitäten. |
| M053 | Textmodule/Anreden | src/backend/Centron.BL/TextModuleArea | Textbausteine sowie Anrede-/Grußformel-Ersetzung. |
| M054 | Tags | src/backend/Centron.BL/Tags | Freie Verschlagwortung (v. a. Tickets). |
| M055 | FiBu-Export/-Import | src/backend/Centron.BL/DataExchange/BookKeeping; Administration/BookKeepingAccountSystems | Übergabe von Stammdaten, Belegen und Kassenbuch an Finanzbuchhaltungen (u. a. DATEV, Abacus) und Rückimport. |
| M056 | Zahlungsverkehr (SEPA) | src/backend/Centron.BL/DataExchange/PaymentTransactions | Export von Lastschriften/Zahlungen als SEPA-XML (pain.008-Varianten). |
| M057 | Zahlungseingänge | src/backend/Centron.BL/Finances/IncomingPayments | Erfassung/Protokollierung von Zahlungseingängen auf Rechnungen. |
| M058 | OnlineBanking (finAPI) | src/backend/Centron.BL/Finances/OnlineBanking; src/apis/Centron.APIs.FinAPI | Abruf von Kontoumsätzen über finAPI und Zuordnung zu Belegen. |
| M059 | Bankkonten | src/backend/Centron.BL/Accounting/BankAccountBL.cs | Verwaltung von Bankverbindungen von Kunden/Firmen. |
| M060 | E-Rechnung | docs/reference/zugferd-field-mapping.md; docs/guides/development/xrechnung.md; src/apis/Centron.Api.EbInterface | Erzeugung elektronischer Rechnungen (ZUGFeRD/XRechnung, ebInterface AT). |
| M061 | Gutschein-/Voucherverwaltung | src/backend/Centron.BL/VoucherManagement | Verwaltung von Gutschein-Barcodes. |
| M062 | Finanzen Sonstiges | src/backend/Centron.BL/Finances/Payments, Finances/ActivitySettings | Zahlungsarten/Aktivitätseinstellungen im Finanzumfeld. |
| M063 | Authentifizierung | src/backend/Centron.BL/Administration/Logins/Auth | Anmeldung per Benutzername/Passwort, Active Directory, OpenID Connect (Entra ID) und Web-Account. |
| M064 | Zwei-Faktor-Authentifizierung | src/backend/Centron.BL/Administration/Logins/TwoFactor; Centron.BL/TwoFactorAuthenticator | Zweiter Faktor per RADIUS oder E-Mail-Link mit Gültigkeitsdauer je Gerät. |
| M065 | Benutzerverwaltung | src/backend/Centron.BL/Administration/Logins/UsersBL.cs; EmployeeArea/AppUserBL.cs | Verwaltung der Anwendungsbenutzer (Sichbenu) inkl. Deaktivierungszeiträumen. |
| M066 | Web-Accounts | src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs | Logins für Endkunden-Kontakte (Portal/Shop) mit Statusprüfung. |
| M067 | Rechteverwaltung | src/backend/Centron.BL/Administration/Rights; CentronRights.md; webservice/.../UserRightsConst.cs | Rechte/Gruppen (Sichtrus/Sichmemb/Sichbenu) inkl. einschränkender Rechte (nur eigene / eigene Filiale). |
| M068 | Lizenzierung | src/backend/Centron.BL/Administration/Licensing | Prüfung von Produktlizenzen, Versionsbeschränkung und paralleler Nutzeranzahl. |
| M069 | Sitzungs-/Ticketverwaltung | src/backend/Centron.BL/Administration/Logins/TicketBL.cs, AuthenticationTicketBL.cs | Vergabe/Wiederverwendung von Anmelde-Tickets je Anwendung/Maschine. |
| M070 | Anwendungseinstellungen | src/backend/Centron.BL/Administration/Settings; Centron.Interfaces/Administration/Settings | Zentrale, typisierte Konfiguration (ApplicationSettings) mit Definitionen und Gruppen. |
| M071 | Mandanten | src/backend/Centron.BL/Administration/Company/MandatorBL.cs | Mandantenverwaltung. |
| M072 | Filialen | src/backend/Centron.BL/Administration/Company/BranchBL.cs | Filialverwaltung inkl. filialbezogener Konten und Läger. |
| M073 | Nummernkreise | src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs; Administration/Mandatory | Vergabe fortlaufender Nummern je Objektart (und Filiale) mit Kollisionsschutz. |
| M074 | DB-Migrationsskripte | src/backend/Centron.BL/Administration/Scripts (ScriptMethods) | Versionierte Datenbank-Migrations-/Wartungsskripte. |
| M075 | DSGVO/Datensicherheit | src/backend/Centron.BL/Administration/DataSecurity; WebServices/Administration/Documents/Dsgvo | Datenschutzfunktionen (DSGVO-Dokumente, Datensicherheit). |
| M076 | Dokumente/Dateiverwaltung | src/backend/Centron.BL/Administration/Documents, FileManagement; WPF: CentronFileSystem | Ablage und Verwaltung von Dokumenten/Dateien zu Objekten. |
| M077 | Hintergrunddienste | src/backend/Centron.BL/Administration/BackgroundServices; docs/Background Service | Serverseitige Hintergrundverarbeitung (z. B. Datenqualitätsdienst). |
| M078 | AccessTokens | src/backend/Centron.BL/Administration/AccessTokens | Verwaltung von API-/Zugriffstokens. |
| M079 | Telemetrie | src/backend/Centron.BL/Telemetry | Erfassung von Nutzungsdaten (API-Aufrufe, KI-/MCP-Toolnutzung). |
| M080 | Themes/Customizing | src/backend/Centron.BL/Administration/Themes, Customization; Centron.BL/Customizations/CustomTables | Oberflächen-Themes und kundenspezifische Erweiterungen/Zusatztabellen. |
| M081 | SQL-/Systemdiagnose | src/backend/Centron.BL/Administration/SQLManagement, NetworkDiagnostics, Profiling, PerformanceTests | Administrative Diagnose- und Wartungswerkzeuge. |
| M082 | Passwortverwaltung (Kundenzugänge) | src/backend/Centron.BL/PasswordManagementArea, PasswordManager | Verschlüsselte Ablage von Zugangsdaten mit Zugriffs-/Änderungsprotokoll. |
| M083 | Mail | src/backend/Centron.BL/Mail | Mailkonten, -einstellungen, -signaturen und Mailversand. |
| M084 | MailScanner | src/backend/Centron.BL/MailScanner | Überwachung von Postfächern und regelbasierte Verarbeitung (z. B. Ticketerzeugung). |
| M085 | Mailings/Newsletter | src/backend/Centron.BL/Mailings | Serienmails/Newsletter mit Vorlagen. |
| M086 | Kalender/Termine | src/backend/Centron.BL/Calendar, AppointmentRequests; Sales/Calendar | Terminkalender inkl. Terminwünschen und Synchronisationseinstellungen. |
| M087 | Chats | src/backend/Centron.BL/Chats | Interner Chat mit Gruppen, Nachrichten, Bearbeiten/Löschen. |
| M088 | SocialMedia-Feed | src/backend/Centron.BL/SocialMedia | Interner Aktivitäten-Feed mit Kommentaren, Likes und Abos auf Objekte. |
| M089 | TAPI-Telefonie | src/backend/Centron.BL/Tapi; assemblies/tapi | Telefonie-Integration: Anruferkennung, Anrufprotokolle, Kontaktsuche per Rufnummer. |
| M090 | ToDo | src/backend/Centron.BL/ToDoArea | Aufgaben-/Wiedervorlagenverwaltung an Objekten. |
| M091 | MyDay/MyCentron | src/backend/Centron.BL/MyDay, MyCentron | Persönliche Tagesübersicht (Arbeitsvorrat) und zuletzt verwendete Objekte. |
| M092 | Benachrichtigungen | src/backend/Centron.BL/Notifications, NexusNotifications | Benutzerbenachrichtigungen im Client und Web (SignalR-Hub). |
| M093 | Outlook-Integration | src/nexus/CentronNexus.OutlookAddIn; Centron.BL/Outlook; assemblies/outlook | Outlook-AddIn zur Verbindung von E-Mails mit c-entron-Objekten. |
| M094 | WebLinks/Kurz-URLs | src/backend/Centron.BL/WebLinks, Urls | Verwaltete Weblinks mit Aktionen und Klick-Protokoll sowie einfache URL-Verwaltung. |
| M095 | Mobile | src/backend/Centron.BL/Mobile | Datenbereitstellung für die mobile Nutzung (mobile Mitarbeiter). |
| M096 | ReportEngine (FastReport) | src/backend/Centron.BL/ReportEngine | Berichtsdefinitionen, -gruppen, -abfragen und Standardberichte je Ausgabekanal. |
| M097 | Berichte (Alt) | src/backend/Centron.BL/Reporting; UI: Modules/Reports | Verwaltung/Rendern klassischer Berichte. |
| M098 | Statistiken | src/backend/Centron.BL/Statistics | Umsatz-, Auftrags-, Ticket-, Vertrags- und MSP-Statistiken. |
| M099 | Volltextsuche | src/backend/Centron.BL/IndexSearch | Lucene-basierter Volltextindex mit deutschem Analyzer über Fachobjekte. |
| M100 | Massenupdates | src/backend/Centron.BL/MassUpdate; UI: Modules/Massenupdates | Massenänderungen an Belegen, Artikeln und Kontodaten über Vorlagen. |
| M101 | Änderungsverfolgung | src/backend/Centron.DAO/ChangeTracking; Centron.BL/ChangeTracking | Feldgenaue Änderungsprotokolle (ChangeLog) über NHibernate-Events. |
| M102 | Import-Historie | src/backend/Centron.BL/ChangeTracking/History (ImportHistoryBL.cs) | Protokollierung durchgeführter Datenimporte. |
| M103 | Erwartete Ereignisse | src/backend/Centron.BL/ExpectedEvents | Überwachung erwarteter Ereignisse (Log je Konto) mit Fehlverhaltensanzeige. |
| M104 | Prozesse (Langläufer) | src/backend/Centron.BL/Processes | Verwaltung langlaufender Verarbeitungsprozesse. |
| M105 | Fachliche Transaktionen | src/backend/Centron.BL/Transactions | Protokollierung fachlicher Transaktionen mit Details je Benutzer. |
| M106 | KI-Funktionen | src/backend/Centron.BL/ArtificialIntelligence; Administration/ArtificialIntelligence | Anbindung von KI-Modellen (u. a. OpenAI-kompatibel) für Ticket-Kategorisierung, Textbewertung, Zusammenfassungen. |
| M107 | EDI | src/backend/Centron.BL/EDI; DataExchange/EDI; src/backend/Centron.Gateway | Elektronischer Belegaustausch mit Distributoren (ALSO, Alltron, Herweck, Komsa, OpenTrans 2.1 u. a.). |
| M108 | docuFORM | Centron.Api.docuFORM; Centron.BL/DataExchange/DocuForm | Anbindung docuFORM (Druckerzähler/Verbrauchsdaten). |
| M109 | RMM-/AssetManagement-Connector | src/backend/Centron.BL/DataExchange/Rmm; Centron.BL/DocuBoard (AssetManagement*) | Anbindung von Remote-Monitoring-Systemen und Übernahme erkannter Geräte. |
| M110 | TANSS-Schnittstelle | src/backend/Centron.BL/DataExchange/TanssInterfaces | Datenaustausch mit TANSS. |
| M111 | Telekom DIVE | src/backend/Centron.BL/DataExchange/TelekomDive; UI: Modules/TelekomDive | Export von Artikel-/Kategoriedaten an Telekom DIVE. |
| M112 | GfK-Export | src/backend/Centron.BL/DataExchange/GfkExport | Meldung von Abverkaufsdaten an GfK. |
| M113 | Datenimport | src/backend/Centron.BL/DataExchange/Import, Connectors | Generische Importe und Konnektoren. |
| M114 | ITscope | src/apis/Centron.APIs.ITscopeDataAccess | Anbindung ITscope (Distributorenkatalog/Bestellung). |
| M115 | Icecat | src/apis/Centron.APIs.IcecatDataAccess | Übernahme von Artikelstammdaten aus Icecat. |
| M116 | COP | src/apis/Centron.APIs.CopDataAccess | SOAP-Anbindung COP (Distributor). |
| M117 | EGIS | src/apis/Centron.APIs.EgisDataAccess; Centron.BL/EDI/EGIS | Anbindung EGIS (Warenkorb/Bestellungen). |
| M118 | GLS-Versand | src/apis/Centron.Api.Gls | Erzeugung von GLS-Versandaufträgen/Labels. |
| M119 | Shipcloud-Versand | src/apis/Centron.Api.Shipcloud; Sales/Receipts/ShipcloudPackageTemplateBL.cs | Versandabwicklung über Shipcloud inkl. Pakettemplates. |
| M120 | RiverDivo/Riverbird | src/backend/Centron.BL/RiverDivo; deployment/riverbird | Kopplung an Riverbird/RiverDivo (Remote-Zugriff/Servicedaten). |
| M121 | C-Pra | src/backend/Centron.BL/CPra | Anbindung C-Pra (WebHooks). |
| M122 | ES-Integrationen | src/backend/Centron.BL/Integrations (EsCustomerGroupBL, EsRoleBL) | Rollen-/Kundengruppenabgleich mit einem externen System (ES). |
| M123 | Custom Gateway | src/backend/Centron.BL/Gateway; WebServices/Gateway | Konfigurierbares Gateway für kundenspezifische externe Aufrufe. |
| M124 | Objekt-Fremdreferenzen | src/backend/Centron.BL/ObjectExternalReferences | Zuordnung externer IDs zu c-entron-Objekten. |
| M125 | SelfCare-Formulare | src/backend/Centron.BL/SelfCare | Konfigurierbare Web-Formulare (Self-Service) mit Status. |
| M126 | Externe Tools | src/backend/Centron.BL/ExternalToolsBL, Tools; UI: Modules/ExternalTool | Einbindung externer Programme mit Variablenübergabe. |
| M127 | VideoPortal | src/backend/Centron.BL/VideoPortal | Zuordnung von Schulungs-/Videoinhalten. |
| M128 | IT-Planner | src/backend/Centron.BL/ItPlanner | Checklisten-/Planungsobjekte für IT-Planungen. |
| M129 | DocuBoard | src/backend/Centron.BL/DocuBoard | Verwaltung AssetManagement-Partner/Artikelzuordnungen (Dokumentationsboard). |
| M130 | WPF-Client (Shell) | src/centron/Centron.WPF.UI | Windows-Desktop-Client: Modulrahmen, Navigation, Layouts, Dialoge, Lokalisierung. |
| M131 | Webservice/Backend-Host | src/webservice (Centron.Host, Centron.WebServices.Core, Centron.Host.WindowsService, Centron.Host.Console) | Zentraler Anwendungsserver (SOAP/REST) als Windows-Dienst, Konsole oder Container. |
| M132 | REST-API v1 | src/webservice/Centron.Controllers | Versionierte REST-Schnittstelle mit JWT-Authentifizierung und Rechte-Attributen. |
| M133 | Nexus-Webclient | src/nexus/CentronNexus, CentronNexus.Host | Blazor-Webclient (ServiceBoard, Management, Office, WebCart, WebOffer, Produktionsaufträge, Dokumentensignatur). |
| M134 | DAO/Persistenz | src/backend/Centron.DAO | NHibernate-Datenzugriff mit Repositories, Named Queries, RawSQL und Mappings. |
| M135 | Entities/Datenmodell | src/backend/Centron.Entities; SSMS_DB_SCHEMA.sql | Entitätsmodell und MSSQL-Schema (1.558 Tabellen, Legacy-Tabellen + englische Views). |
| M136 | Basisbibliotheken | src/backend/Centron.Common, Centron.Interfaces; src/shared/Centron.Core, Centron.Controls | Querschnittsfunktionen, Interfaces/DTO-Verträge, WPF-Controls. |
| M137 | ConnectionManager | src/webservice/c-entron.misc.ConnectionManager | Werkzeug zur Verwaltung von Verbindungsprofilen. |
| M138 | Deployment/Installer | deployment (centron, WixSharpInstaller, riverbird) | Erstellung der Installationspakete. |
| M139 | Docker/Linux-Betrieb | docker/; docs/guides/services/web-service-on-linux.md | Containerisierter Betrieb von Webservice, Demo, Mailcatcher, Regressionstest-DB. |
| M140 | CI/CD | azure/, .github/workflows | Automatisierte Builds/Pipelines. |
| M141 | Tests | tests/ (Integration, EndToEnd, Playwright, Unit) | Automatisierte Test-Suiten. |
| M142 | Modulverwaltung | src/backend/Centron.BL/Modules; WPF: Modules/ModuleRegistration.cs | Registrierung/Kategorisierung der Anwendungsmodule inkl. Rechtebindung. |
| M143 | Start/Versionsprüfung | src/backend/Centron.BL/Start, WebVersion, WebSuite | Startlogik des Clients inkl. Versionsabgleich mit dem Webservice. |
| M144 | GUI-Personalisierung | src/backend/Centron.BL/GUI (UserGridBL.cs); Administration/Themes | Speicherung benutzerspezifischer Grid-/Oberflächeneinstellungen. |
| M145 | Caching-Dienste | src/backend/Centron.BL/Services (CachedTableBL.cs) | Serverseitiges Tabellen-Caching. |
| M146 | Icons | src/backend/Centron.BL/CentronIcons | Verwaltung der Anwendungs-Icons. |
| M147 | Zeitsteuerung | src/backend/Centron.BL/Time (TimingSettingsBL.cs) | Timing-/Zeiterfassungseinstellungen. |
| M148 | SystemArea | src/backend/Centron.BL/SystemArea (SystemTableI3DBL.cs) | Systemtabellen-/ID-Verwaltung. |
| M149 | Helpers | src/backend/Centron.BL/Helpers | Hilfsfunktionen (PDF, Word-Bilder, Graph-Client, Logging). |
| M150 | Kern-Krypto | src/backend/Centron.BL/Core (CryptoUtils.cs, ReplacementBL.cs) | Salz-/Hash-Erzeugung und Platzhalter-Ersetzung. |
Nachträgliche Ergänzungen des Inventars sind unter „1a. Inventar-Ergänzungen" zu führen (keine vorhanden).
---
## 2. Abdeckungstabelle
*(wird nach Abschluss der Anforderungserhebung gefüllt – siehe Abschnitt am Ende dieses Dokuments)*
## 3. Konsistenzcheck
*(wird nach Abschluss der Anforderungserhebung gefüllt)*
## 4. Risikorelevante Anforderungen
*(wird nach Abschluss der Anforderungserhebung gefüllt)*
## 5. Selbstbewertung
*(wird nach Abschluss der Anforderungserhebung gefüllt)*
@@ -0,0 +1,600 @@
# StRS – Stakeholder Requirements Specification
c-entron ERP-Suite (Reverse Requirements Engineering, statische Analyse).
Referenzrahmen: ISO/IEC/IEEE 29148:2018. Sprache: Deutsch; technische Bezeichner original.
**Identifizierte Akteure (aus Code, Rechte-Doku und UI-Ressourcen abgeleitet):**
Innendienst/Vertrieb, Servicetechniker, Helpdesk-Mitarbeiter, Buchhaltung, Einkäufer,
Lagermitarbeiter, Administrator, Geschäftsführung/Controlling, Endkunde (Web-Account),
Mandant/Filiale als Organisationseinheiten, externe Systeme (Distributoren, FiBu, Banken).
---
```
ID: StRS-001
Titel: Durchgängige Auftragsabwicklung über Belegkette
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Innendienst/Vertrieb
Vorbedingung: Kunde und Artikel sind als Stammdaten angelegt.
Fakt: Die Codebasis führt die Belegarten Angebot, Auftrag, Lieferschein, Rechnung, Gutschrift, Abholschein und Vertrag als eigenständige, gemeinsam verankerte Belegtypen (ReceiptBase-Hierarchie, Tabellen AngKopf/AufKopf/LiefKopf/RechKopf/GutKopf/AbholKopf/VertragKopf).
Aussage: Das System soll den Vertriebsprozess vom Angebot über Auftrag und Lieferung bis zur Rechnung/Gutschrift als zusammenhängende Belegkette unterstützen.
Ergebnis: Ein Geschäftsvorfall ist über alle Belegstufen dokumentiert und nachvollziehbar.
Belege:
- [PRIMÄR] src/backend/Centron.Entities/Entities/Sales/Receipts/ReceiptBase.cs (abstrakte Basisklasse, abstrakte Methode ReceiptKind) – Begründung: gemeinsame Belegbasis aller Belegarten ist im Code verankert.
- [SEKUNDÄR] docs/reference/receipts/receipts-backend-architecture.md (Tabelle „Receipt Types Hierarchy") – Begründung: Entwicklerdokumentation benennt alle Belegarten und ihre DB-Tabellen.
Prüfidee: Für einen Testkunden Angebot→Auftrag→Lieferschein→Rechnung erzeugen; jede Stufe referenziert die Vorstufe.
Tracelinks: SyRS-010, SyRS-011, SyRS-012
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Kernprozess jedes ERP-Systems.
Status: belegt
```
```
ID: StRS-002
Titel: Automatisierte wiederkehrende Vertragsabrechnung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Buchhaltung
Vorbedingung: Verträge mit Abrechnungsintervall und Positionen existieren.
Fakt: AutomaticFacturaBL/AutomaticFacturaBL.Contracts.cs implementieren Suche abrechenbarer Verträge (SearchBillingContracts), Intervallfortschreibung (SetNextBillingDate, NextDate) und Rechnungszuordnung (StoreInvoiceToContract) inkl. Normalisierungskoeffizienten (MonthNormalizeCoefficient u. a.).
Aussage: Das System soll wiederkehrende Leistungen (Wartung, Miete, Kontingente, Klickzähler) aus Verträgen automatisiert und periodengerecht in Rechnungen überführen.
Ergebnis: Zum Stichtag fällige Verträge sind fakturiert; das nächste Abrechnungsdatum ist fortgeschrieben.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs, Methoden SearchBillingContracts / SetNextBillingDate / StoreInvoiceToContract – Begründung: durchsetzende Abrechnungslogik (Auswahl fälliger Verträge, Fortschreibung, Rechnungszuordnung).
- [SEKUNDÄR] docs/reference/receipts/contracts-backend.md (Billing Configuration: BillingIntervalKind, AutomatedBilling) – Begründung: dokumentiert die fachlichen Abrechnungsparameter am Vertrag.
Prüfidee: Vertrag mit Monatsintervall anlegen, Abrechnungslauf zum Stichtag ausführen; genau eine Rechnung entsteht, LastInvoiceDate/nächstes Datum korrekt fortgeschrieben.
Tracelinks: SyRS-020
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – zentrales Umsatzmodell (MSP/Servicevertrieb) der Zielgruppe.
Status: belegt
```
```
ID: StRS-003
Titel: Forderungsmanagement mit Mahnwesen und offenen Posten
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Buchhaltung
Vorbedingung: Rechnungen mit Fälligkeit sind gebucht.
Fakt: DunningRunBL führt Mahnläufe mit drei Mahnstufen (DunningLevel.Level1–Level3) und fortlaufender Mahnlaufnummer aus; DunningBL kennt Mahnstopp (DunningStop, DunningStopBegin/End); OposBL/OposRunBL verwalten offene Posten.
Aussage: Das System soll überfällige Forderungen erkennen, in bis zu drei Mahnstufen anmahnen (Druck oder E-Mail) und offene Posten auswerten; einzelne Kunden/Rechnungen sollen vom Mahnlauf ausgenommen werden können (Mahnstopp).
Ergebnis: Mahnungen sind erzeugt und dokumentiert; Mahnstufen der Rechnungen sind fortgeschrieben.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs, Methode UpdateInvoice (switch über DunningLevel None→1→2→3) – Begründung: durchgesetzte Mahnstufenlogik.
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningBL.cs, Methode SetDunningStop (setzt DunningStop/Begin/End am AccountCustomer) – Begründung: durchgesetzter Mahnstopp.
Prüfidee: Überfällige Rechnung dreimal anmahnen; vierte Mahnung wird abgelehnt (ArgumentOutOfRangeException-Pfad), Mahnstopp verhindert Aufnahme in den Lauf.
Tracelinks: SyRS-021, SyRS-022
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – gesetzlich/kaufmännisch erforderliches Forderungsmanagement.
Status: belegt
```
```
ID: StRS-004
Titel: SEPA-Zahlungsverkehr für Lastschriften
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Buchhaltung
Vorbedingung: Rechnungen mit Lastschrift-Zahlungsart und Bankverbindung/Mandat liegen vor.
Fakt: PaymentTransactionBL exportiert Rechnungen als SEPA-Lastschriftdateien in den Formatvarianten Sepa0080101/0080302/0080102/00800102GBIC3/00800108GBIC4 (enum PaymentTransactionInterface) und markiert exportierte Rechnungen (SetInvoicesAsExported).
Aussage: Das System soll fällige Lastschriften als bankfähige SEPA-XML-Dateien exportieren und den Exportstatus je Rechnung nachhalten.
Ergebnis: Eine SEPA-Datei je Lauf; exportierte Rechnungen sind gekennzeichnet und können zurückgesetzt werden.
Belege:
- [PRIMÄR] src/backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs, Methoden ExportInvoices / SetInvoicesAsExported / ResetInvoiceExportedFlag – Begründung: durchsetzende Exportlogik inkl. Statusführung.
- [PRIMÄR] src/backend/Centron.Interfaces/DataExchange/PaymentTransactions/PaymentTransactionInterface.cs (enum mit pain.008-Varianten) – Begründung: implementierte Formatvarianten.
Prüfidee: Export mit zwei Testrechnungen ausführen; XML validiert gegen pain.008-Schema, erneuter Lauf enthält die Rechnungen nicht mehr.
Tracelinks: SyRS-023
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Zahlungsabwicklung ist Pflicht; Formatversionen im Zielsystem aktualisieren.
Status: belegt
```
```
ID: StRS-005
Titel: Übergabe an die Finanzbuchhaltung
Ebene: StRS
Typ: Schnittstelle
Qualitätsmerkmal:
Akteur: Buchhaltung; externes FiBu-System (u. a. DATEV, Abacus)
Vorbedingung: Belege bzw. Stammdaten sind freigegeben/abgeschlossen.
Fakt: BookKeepingExportBL exportiert Kunden-/Lieferantenstammdaten, Kunden-/Lieferantenbelege und Kassenbuch (enum BookKeepingExportKind) mit Übergabehistorie (GetBookKeepingExport*History) und Doppel-Export-Schutz (IsReceiptExported); zahlreiche DATEV-Einstellungen existieren (ApplicationSettingID.Datev*).
Aussage: Das System soll Debitoren/Kreditoren, Buchungsdaten der Belege und Kassenbuchdaten an Finanzbuchhaltungssysteme übergeben, Übergaben protokollieren und Doppelübergaben verhindern.
Ergebnis: Exportdateien im Zielformat; Historie der Übergaben ist einsehbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/DataExchange/BookKeeping/BookKeepingExportBL.cs, Methoden IsReceiptExported / GetReceiptsBookingdataExportFile / GetCustomerDataExportFile – Begründung: durchsetzende Export- und Schutzlogik.
- [SEKUNDÄR] src/backend/Centron.Interfaces/Administration/Settings/ApplicationSettingID.cs (DatevOnlineSavePath, DatevFolderForInvoice u. a.) – Begründung: Konfigurationsschalter belegen DATEV-Integration.
Prüfidee: Abgeschlossene Rechnung exportieren; zweiter Exportversuch wird als bereits exportiert erkannt.
Tracelinks: SyRS-024
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Kernanforderung im deutschen Markt (DATEV-Anbindung).
Status: belegt
```
```
ID: StRS-006
Titel: Kassenführung in Filialen
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Filialmitarbeiter, Buchhaltung
Vorbedingung: Kassenbuch je Filiale eingerichtet.
Fakt: Sales/CashBooks enthält CashBookBL, CashBookBookingBL, CashBookRecordBL mit Buchungen, Löschregeln und Verknüpfung zu Belegen; Kassenbuchdaten sind Teil des FiBu-Exports (BookKeepingExportKind.Cashbook).
Aussage: Das System soll Barbewegungen je Kasse als Kassenbuch führen und in die Buchhaltung überleiten.
Ergebnis: Kassenbuchungen sind erfasst, mit Belegen verknüpft und exportierbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/CashBooks/CashBookBookingBL.cs, Methoden DeleteCashBookBooking / GetCashBookBookingsFromAsset – Begründung: implementierte Kassenbuchlogik mit Belegbezug.
Prüfidee: Kassenbuchung zu einem Beleg anlegen und im FiBu-Export „Cashbook" wiederfinden.
Tracelinks: SyRS-024
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – für Filialbetriebe mit Barverkauf erforderlich.
Status: belegt
```
```
ID: StRS-007
Titel: Serviceticket-Management mit abrechenbarer Zeiterfassung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Helpdesk-Mitarbeiter, Servicetechniker, Serviceleitung
Vorbedingung: Kunde existiert; Ticketstammdaten (Typen, Status, Prioritäten, Kategorien) sind gepflegt.
Fakt: Sales/Support enthält >50 BL-Klassen für Tickets (HelpdeskBL, HelpdeskStatusBL, HelpdeskCloseBL, HelpdeskHistoryBL, Escalation, HelpdeskTimer*); Zeiten können signiert (HelpdeskTimerSignatureBL) und Artikeln/Belegen zugeordnet werden (HelpdeskTimerArticleBookingBL); Rechte-Doku CentronRights.md beschreibt Zeiten-Verschiebung nur, solange das Ticket nicht Teil eines Belegs ist.
Aussage: Das System soll Kundenanfragen als Tickets mit Status, Kategorien, Prioritäten, Historie und Eskalation verwalten; erfasste Arbeitszeiten sollen vom Kunden signierbar und in die Fakturierung überführbar sein.
Ergebnis: Tickets sind lückenlos dokumentiert; geleistete Zeiten fließen in Belege ein.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs, Methode CloseHelpdesk (setzt HelpdeskState=closed, ClosedAt, erzeugt Historie/Aktivität) – Begründung: durchgesetzter Ticket-Abschlussprozess.
- [PRIMÄR] src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs, Methoden AddSignature / SignMultipleTimers / RemoveSignatureFromTime – Begründung: implementierte Signaturfunktion auf Zeiteinträgen.
- [KONTEXT] CentronRights.md Abschnitt 8/9 („nur wenn das Ticket nicht Teil eines Belegs ist") – Begründung: bestätigt die Kopplung Zeiterfassung↔Beleg.
Prüfidee: Ticket mit Zeiteintrag anlegen, signieren, abrechnen; danach ist Verschieben/Löschen des Zeiteintrags gesperrt.
Tracelinks: SyRS-030, SyRS-031, SyRS-032
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Kern des Servicegeschäfts (Systemhaus/MSP).
Status: belegt
```
```
ID: StRS-008
Titel: Zentrale Kunden- und Kontaktverwaltung (CRM)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Vertrieb, Innendienst, Service
Vorbedingung: –
Fakt: Parallel existieren der Alt-Kundenstamm (Tabellen Kunden/Anschrif/Personen, Sales/Customers) und der neue Konten-/Adressstamm (Accounts, AccountAddress, AccountAddressContact in Centron.BL/Accounts) mit Kunden-/Lieferantenrollen (AccountCustomers/AccountSuppliers).
Aussage: Das System soll Geschäftspartner mit Adressen, Ansprechpartnern, Rollen (Kunde/Lieferant), Branchen, Interessen und Aktivitäten zentral verwalten.
Ergebnis: Ein Geschäftspartner ist einheitlich auffindbar und in allen Prozessen referenzierbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Accounts/AccountBL.cs, Methoden GetAccount / CreateNewAccountTypeForAccount – Begründung: implementierter vereinheitlichter Kontenstamm.
- [PRIMÄR] SSMS_DB_SCHEMA.sql, CREATE TABLE Accounts / AccountCustomers / AccountSuppliers / Kunden – Begründung: beide Datenhaltungen existieren im Schema.
Prüfidee: Konto mit Kunden- und Lieferantenrolle anlegen; beide Rollen in Verkauf und Einkauf nutzbar.
Tracelinks: SyRS-040
Konsolidierung: Kandidat: Alt-Kundenstamm (Kunden/Anschrif/Personen) und Accounts-Stamm bilden denselben fachlichen Gegenstand ab und sollen im Zielsystem zu einem Partnerstamm zusammengeführt werden.
Übernahmewürdigkeit: übernehmen – Stammdatenbasis aller Prozesse; Zusammenführung der Doppelstruktur nötig.
Status: belegt
```
```
ID: StRS-009
Titel: Einkauf mit elektronischer Distributorenanbindung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Einkäufer; Distributoren (ALSO, Alltron, Herweck, Komsa, ITscope, EGIS u. a.)
Vorbedingung: Lieferant mit EDI-Konfiguration vorhanden.
Fakt: EDIDispatcherBL erzeugt/überträgt Bestellungen elektronisch (CreateEDISuggestionOrderAsync, EdiEgisOrderUploadAsync, EdiItScopeOrderUploadAsync, EdiConcertoOrderUploadAsync); docs/reference/edi beschreibt Verarbeitung von Bestellantworten, Lieferavisen und Rechnungen je Lieferant.
Aussage: Das System soll Bestellungen elektronisch an Distributoren übertragen und deren Rückmeldungen (Auftragsbestätigung, Lieferavis, Rechnung) automatisiert verarbeiten.
Ergebnis: Bestellprozesse laufen ohne manuelle Doppelerfassung; EDI-Vorgänge sind protokolliert (EDILogBL).
Belege:
- [PRIMÄR] src/backend/Centron.BL/EDI/EDIDispatcherBL.cs, Methoden EdiEgisOrderUploadAsync / EdiItScopeOrderUploadAsync – Begründung: durchsetzende Übertragungslogik.
- [SEKUNDÄR] docs/reference/edi/edi-architecture.md (SupplierEdiBL-Partialklassen je Distributor) – Begründung: dokumentiert die unterstützten Distributoren und Belegflüsse.
Prüfidee: Testbestellung im OpenTrans-2.1-Format erzeugen und gegen Schema prüfen.
Tracelinks: SyRS-050
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – zentrale Effizienzfunktion für IT-Handel.
Status: belegt
```
```
ID: StRS-010
Titel: Lager- und Bestandsführung mit Inventur
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Lagermitarbeiter
Vorbedingung: Läger und Artikel sind angelegt.
Fakt: StockBL verwaltet Läger inkl. Filialzuordnung und Umbuchungsprotokoll (WriteStockRebookLog); StorageBL/InventoryArticlePool implementieren Inventur (AddInventory, RefreshInv) mit Transaktionssteuerung.
Aussage: Das System soll Bestände je Lager führen, Umbuchungen protokollieren und Inventuren mit Bestandsabgleich unterstützen.
Ergebnis: Bestände sind je Lager korrekt; Umbuchungen und Inventuren sind nachvollziehbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Logistics/Warehousing/StockBL.cs, Methode WriteStockRebookLog – Begründung: durchgesetzte Protokollierung von Lagerumbuchungen.
- [PRIMÄR] src/backend/Centron.BL/Storage/StorageBL.cs, Methoden AddInventory / StartTransaction / CommitTransaction – Begründung: implementierte Inventurlogik.
Prüfidee: Umbuchung zwischen zwei Lägern erzeugen; RebookLog-Eintrag vorhanden; Inventur ändert Bestand nachvollziehbar.
Tracelinks: SyRS-051, SyRS-052
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Grundfunktion Warenwirtschaft.
Status: belegt
```
```
ID: StRS-011
Titel: Artikelstamm mit differenzierter Preisfindung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Produktmanagement, Vertrieb
Vorbedingung: –
Fakt: Warehousing enthält ArticleBL mit Spezialartikeln (Fracht-, Kundenrabatt-, Kontingentausgleichsartikel), ActionPriceBL (Aktionspreise), ArticleVolumePricesBL (Staffelpreise), CustomerSpecialArticleBL (kundenspezifische Sonderpreise); ReceiptPriceHelperBL berechnet Positions- und Belegpreise inkl. MwSt., Rabatt und Währungsfaktor.
Aussage: Das System soll Artikel mit Einkaufs-/Verkaufspreisen führen und bei der Belegerstellung die Preisfindung aus Listenpreis, Aktionspreis, Staffelpreis und kundenindividuellem Sonderpreis anwenden.
Ergebnis: Belegpositionen erhalten nachvollziehbar den korrekten Preis inkl. Steuer.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/ReceiptPriceHelperBL.cs, Methoden CalculateReceiptItemPrices / CalculateReceiptVatPrices – Begründung: durchsetzende Preis-/Steuerberechnung.
- [PRIMÄR] src/backend/Centron.BL/Warehousing/ActionPriceBL.cs, ArticleVolumePricesBL.cs – Begründung: implementierte Preisarten.
Prüfidee: Artikel mit Listen-, Aktions- und Sonderpreis anlegen; Belegposition zieht die dokumentierte Priorität.
Tracelinks: SyRS-014, SyRS-053
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Kern der Warenwirtschaft.
Status: belegt
```
```
ID: StRS-012
Titel: Rollen- und rechtebasierter Zugriffsschutz
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Administrator, Geschäftsführung/Compliance
Vorbedingung: Benutzer, Gruppen und Rechte sind gepflegt.
Fakt: Rechte werden über Gruppen zugewiesen (SQL-Join Sichtrus→Sichmemb in AppRightsBL.CheckRightsFromUser); es existieren einschränkende Rechte („nur eigene", „nur eigene Filiale") laut CentronRights.md und deren Durchsetzung z. B. in HelpdeskBL (ShowHelpdeskRight.OnlyOwn/OnlyOwnBranch).
Aussage: Das System soll jede fachliche Funktion über ein feingranulares Rechtesystem (Benutzer→Gruppen→Rechte) schützen, einschließlich einschränkender Rechte auf eigene Datensätze bzw. die eigene Filiale.
Ergebnis: Benutzer sehen und bearbeiten nur Daten, für die ihnen Rechte zugewiesen sind.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs, Methode CheckRightsFromUser (SQL über dbo.Sichtrus/dbo.Sichmemb) – Begründung: durchsetzende Rechteprüfung.
- [PRIMÄR] src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs, Zeilen 269–291 (Auswertung SHOW_HELPDESK_ONLY_OWN / _ONLY_OWN_BRANCH) – Begründung: durchgesetzte einschränkende Rechte.
- [SEKUNDÄR] CentronRights.md – Begründung: fachliche Beschreibung der Rechte inkl. Restriktionssemantik.
Prüfidee: Benutzer nur mit SHOW_HELPDESK_ONLY_OWN sieht ausschließlich Tickets, bei denen er Bearbeiter/Verantwortlicher ist.
Tracelinks: SyRS-001, SyRS-004, SyRS-005
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Compliance-Grundanforderung.
Status: belegt
```
```
ID: StRS-013
Titel: Kontrollierte Benutzeranmeldung mit Mehrfaktor-Option
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Alle Benutzer; Administrator
Vorbedingung: Benutzerkonto existiert und ist aktiv.
Fakt: Authentifizierung erfolgt wahlweise per Benutzername/Passwort (BasicAuthenticator), Active Directory, OpenID Connect/Entra ID oder Web-Account (AuthenticatorFactory-Varianten); deaktivierte Konten und Austrittsdaten verhindern die Anmeldung (Authenticator.ValidateAppUser); optional wird ein zweiter Faktor per RADIUS oder E-Mail-Link verlangt (TwoFactorAuthBL).
Aussage: Das System soll Benutzer sicher authentifizieren, deaktivierte oder ausgeschiedene Mitarbeiter abweisen und optional eine Zwei-Faktor-Authentifizierung mit konfigurierbarer Gültigkeitsdauer je Gerät erzwingen.
Ergebnis: Nur berechtigte, aktive Benutzer erhalten eine Sitzung.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/Auth/Authenticator.cs, Methode ValidateAppUser (Prüfung IsAccountDisabled, AccountDisabledFrom/ToDate, IsActiveEmployeeCompact) – Begründung: durchsetzende Kontoprüfung.
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/TwoFactor/TwoFactorAuthBL.cs, Methode HasToValidateTwoFactor – Begründung: durchgesetzte 2FA-Pflichtlogik.
Prüfidee: Anmeldeversuch mit deaktiviertem Konto → Fehlermeldung „Mitarbeiterkonto wurde deaktiviert"; 2FA-Pflicht nach Ablauf der Gültigkeitsdauer.
Tracelinks: SyRS-001, SyRS-002, SyRS-003
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Sicherheitsgrundanforderung; Passwort-Hashing im Zielsystem modernisieren (siehe SwRS-Sicherheit).
Status: belegt
```
```
ID: StRS-014
Titel: Lizenzbasierte Nutzungssteuerung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Hersteller (c-entron Software), Administrator
Vorbedingung: Lizenzdatei/Lizenzserver verfügbar.
Fakt: LicenseManager.CheckLicense prüft je Anwendung Lizenz-GUID, Versionsbeschränkung und maximale gleichzeitige Nutzung (Ticketanzahl >= Lizenzanzahl → „Die maximale Anzahl an Lizenzen wurde erreicht.").
Aussage: Das System soll den Zugang je Anwendung/Modul an Lizenzen binden und die Anzahl gleichzeitiger Anmeldungen auf die lizenzierte Menge begrenzen.
Ergebnis: Anmeldung über Lizenzgrenze hinaus wird abgewiesen.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Licensing/LicenseManager.cs, Methode CheckLicense (Vergleich currentlyUsedLicenses >= maxNumberOfLicenses) – Begründung: durchsetzende Lizenzprüfung.
Prüfidee: Bei Lizenzanzahl n meldet sich Benutzer n+1 an → Fehlermeldung Lizenzmaximum.
Tracelinks: SyRS-006
Konsolidierung: nein
Übernahmewürdigkeit: Sonderfall – herstellerseitiges Geschäftsmodell; im SaaS-Zielsystem durch Abo-/Mandantenmodell zu ersetzen.
Status: belegt
```
```
ID: StRS-015
Titel: Kundenselbstbedienung über Webportal
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Endkunde (Web-Account)
Vorbedingung: Web-Account für Kundenkontakt existiert und ist aktiv.
Fakt: CentronNexus enthält WebCart (Shop auf Basis Kunden-Sonderpreisen laut README), WebOffer, SelfCare-Formulare und Ticketfunktionen; Warenkörbe durchlaufen ein Freigabewesen (ReceiptCartReleaseSystemBL, nur Web-Account-Logins: Guard „Only web-account logins ready carts for check").
Aussage: Das System soll Endkunden ein Webportal bieten, in dem sie Artikel zu vereinbarten Preisen bestellen, Angebote einsehen, Formulare ausfüllen und Tickets verfolgen können; Bestellungen sollen kundenseitig einem Prüf-/Freigabeprozess unterliegen können.
Ergebnis: Kundenbestellungen erreichen den Innendienst strukturiert und freigegeben.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/ReceiptCartReleaseSystemBL.cs, Methode ReadyCartForCheck – Begründung: durchgesetzter Freigabeprozess für Web-Warenkörbe.
- [KONTEXT] README.md Abschnitt „WebCart" – Begründung: beschreibt Zweck (Kunden der Kunden) und Preisquelle Sonderpreise.
Prüfidee: Web-Account legt Warenkorb an, Prüfer lehnt ab → Status DeclinedByChecker; nach Freigabe entsteht Bestellung.
Tracelinks: SyRS-060, SyRS-061
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – strategisch für SaaS-Ziel (Self-Service).
Status: belegt
```
```
ID: StRS-016
Titel: Auswertungen, Statistiken und Berichte
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Geschäftsführung/Controlling, Vertrieb, Serviceleitung
Vorbedingung: Bewegungsdaten vorhanden.
Fakt: Statistics enthält Umsatz-/Auftrags-/Ticket-/Vertrags-/MSP-Statistiken; ReportEngine verwaltet FastReport-Berichte in Gruppen mit Standardberichten je Ausgabeart (ReportGroupBL, ReportDataDefault Type Mail/Print, z. B. Gruppe MAHNUNG).
Aussage: Das System soll betriebliche Kennzahlen (Umsätze, Aufträge, Tickets, Verträge) auswerten und Druck-/Mailberichte über konfigurierbare Berichtsvorlagen erzeugen.
Ergebnis: Auswertungen und Belegdrucke stehen rollengerecht zur Verfügung.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs, Methode GenerateReport (ReportGroupConstants.MAHNUNG, Defaults je SendType) – Begründung: durchgesetzte Berichtsauswahl je Ausgabekanal.
- [PRIMÄR] src/backend/Centron.BL/Statistics (Ordnerstruktur mit SaleStatistics, TicketStatistics, ContractStatistics, MspStatistics) – Begründung: implementierte Statistikbereiche.
Prüfidee: Mahnlauf mit SendType Mail nutzt den Mail-Standardbericht der Gruppe „Mahnung".
Tracelinks: SyRS-070, SyRS-071
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Steuerungsrelevanz; Berichtstechnologie im Ziel neu wählbar.
Status: belegt
```
```
ID: StRS-017
Titel: Interne Zusammenarbeit und Selbstorganisation
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Mitarbeiter
Vorbedingung: –
Fakt: Es existieren Kalender (CalendarBL, AppointmentRequests), ToDo (ToDoBL), Chat (ChatBL mit Gruppen/Nachrichten), MyDay-Arbeitsvorrat (MyDayBL), Benachrichtigungen (UserNotificationBL, NotificationsHubHelper) und ein interner SocialMedia-Feed (SocialMediaBL mit Kommentaren/Likes/Abos).
Aussage: Das System soll Mitarbeitern Kalender, Aufgaben, Chat, persönliche Tagesübersicht und Benachrichtigungen als integrierte Werkzeuge der Zusammenarbeit bereitstellen.
Ergebnis: Termine, Aufgaben und Informationen sind ohne Systemwechsel verfügbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Chats/ChatBL.cs (CreateChat, SendChatMessage, EditChatMessage) – Begründung: implementierte Chat-Funktionen.
- [PRIMÄR] src/backend/Centron.BL/MyDay/MyDayBL.cs (SaveOrUpdateWorkItem, GetEmployeeSelection) – Begründung: implementierter Arbeitsvorrat.
Prüfidee: Chatnachricht senden/ändern/löschen; MyDay-Eintrag anlegen und in der Tagesansicht sehen.
Tracelinks: SyRS-080
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Kollaborationsfunktionen; Chat ggf. durch Standardtools ersetzbar (Bewertung im Ziel).
Status: belegt
```
```
ID: StRS-018
Titel: Integrierte E-Mail-Verarbeitung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Innendienst, Helpdesk; E-Mail-Infrastruktur
Vorbedingung: Mailkonten sind konfiguriert.
Fakt: Mail-BL verwaltet Konten/Signaturen/Vorlagen; MailScannerBL verarbeitet Postfächer über Workflows/Profile mit Protokoll (MailScannerLog); Outlook-AddIn (CentronNexus.OutlookAddIn) koppelt Outlook an c-entron; Ticket-Mailversand über HelpdeskSendMailBL.
Aussage: Das System soll E-Mails senden (mit Vorlagen/Signaturen), eingehende Postfächer regelbasiert verarbeiten (u. a. automatische Ticketerzeugung) und sich in Outlook integrieren.
Ergebnis: Kundenkommunikation ist am Vorgang dokumentiert; eingehende Mails erzeugen Vorgänge.
Belege:
- [PRIMÄR] src/backend/Centron.BL/MailScanner/MailScannerBL.cs (GetWorkflows, SaveProfile, SaveMailScannerLog) – Begründung: implementierte regelbasierte Mailverarbeitung.
- [SEKUNDÄR] docs/features/automatic-helpdesk-creation-templates.md – Begründung: dokumentiert automatische Ticketerzeugung aus Mails.
Prüfidee: Eingehende Mail auf überwachtem Postfach erzeugt gemäß Workflow ein Ticket mit Protokolleintrag.
Tracelinks: SyRS-081, SyRS-082
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – zentraler Kommunikationskanal.
Status: belegt
```
```
ID: StRS-019
Titel: Verwaltung von Kundengeräten und Managed Services
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Servicetechniker, MSP-Betrieb; RMM-Systeme, docuFORM
Vorbedingung: Kundengeräte sind erfasst oder werden automatisch erkannt.
Fakt: AccountDeviceBL verwaltet Kundengeräte mit Log; AssetManagement*-Tabellen (u. a. AssetManagementDevices, AssetManagementSnmp*) und RMM-/docuFORM-Anbindungen liefern Gerätedaten; Verträge führen Gerätelisten (MasterDataLists) mit Klickzählern (AutomaticFacturaBL.Contracts: Counter-Funktionen), MspCollectorsBL sammelt MSP-Mengen.
Aussage: Das System soll die beim Kunden betriebenen Geräte inkl. automatisch erhobener Daten (RMM, Zählerstände) verwalten und als Abrechnungsgrundlage für Serviceverträge nutzen.
Ergebnis: Gerätebestand aktuell; verbrauchsabhängige Abrechnung möglich.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Devices/AccountDeviceBL.cs (SaveAccountDevice, WriteAccountDeviceLog) – Begründung: implementierte Geräteverwaltung mit Protokoll.
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs (StoreCounterState, GetCurrentCounterState, UpdClickCounterHistory) – Begründung: durchgesetzte Zähler-Abrechnungslogik.
Prüfidee: Zählerstand importieren; Vertragsabrechnung berechnet Klicks über Freimenge korrekt.
Tracelinks: SyRS-020, SyRS-090
Konsolidierung: Kandidat: Gerätedaten liegen mehrfach vor (AccountDevices, AssetManagementDevices, Vertrags-Stammdatenlisten) – im Zielsystem zu einem Gerätekonzept zusammenführen.
Übernahmewürdigkeit: übernehmen – MSP-Geschäftsmodell.
Status: belegt
```
```
ID: StRS-020
Titel: Projekte und Produktionsaufträge
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Projektleiter, Fertigung/Technik
Vorbedingung: –
Fakt: ProjectBL liefert Projektlisten; TicketProjects bündelt Tickets mit Aufgaben/Abhängigkeiten; ProductionOrderBL verwaltet Fertigungsaufträge mit Positionen und Log; CrmProjects bilden Vertriebsprojekte ab; Nexus enthält ProductionOrderManagement.
Aussage: Das System soll projektbezogenes Arbeiten (Vertriebs-, Ticket- und Fertigungsprojekte) mit Aufgaben, Abhängigkeiten und Protokollen unterstützen.
Ergebnis: Projektfortschritt und Fertigungsstatus sind nachvollziehbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Production/ProductionOrderBL.cs (SaveProductionOrder, SaveProductionOrderLog) – Begründung: implementierte Fertigungsauftragsverwaltung.
- [PRIMÄR] src/backend/Centron.BL/TicketProjects/TicketProjectBL.cs (SaveOrUpdateTicketProject, SaveOrUpdateTicketProjectDependency) – Begründung: implementierte Ticketprojekte mit Abhängigkeiten.
Prüfidee: Fertigungsauftrag mit zwei Positionen anlegen; Statuswechsel wird im Log protokolliert.
Tracelinks: SyRS-091, SyRS-092
Konsolidierung: Kandidat: Projektbegriffe (Project, CrmProject, TicketProject, ProjectNumber am Beleg) sind getrennt implementiert – im Zielsystem vereinheitlichen.
Übernahmewürdigkeit: übernehmen – verbreitetes Arbeitsmodell der Zielkunden.
Status: belegt
```
```
ID: StRS-021
Titel: Reklamations-/RMA-Abwicklung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Service, Lager; Lieferant
Vorbedingung: Gerät/Artikel mit Kaufbezug vorhanden.
Fakt: RmaBL verwaltet RMA-Vorgänge mit Artikeln, Historie und Versandarten (RmaSendKindBL); RMA kann aus einem Ticket entstehen (GetRmaByHelpdeskI3D); UI-Modul Rma existiert.
Aussage: Das System soll Rücksendungen/Reklamationen als RMA-Vorgänge mit Artikeln, Historie und Bezug zu Tickets abwickeln.
Ergebnis: RMA-Vorgänge sind durchgängig dokumentiert.
Belege:
- [PRIMÄR] src/backend/Centron.BL/CustomerArea/RmaBL.cs (SaveRma, GetRmaByHelpdeskI3D, CreateNewRmaArticle) – Begründung: implementierte RMA-Verwaltung mit Ticketbezug.
Prüfidee: RMA aus Ticket erzeugen; Artikelhistorie zeigt den Vorgang.
Tracelinks: SyRS-093
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Standardprozess im Hardwaregeschäft.
Status: belegt
```
```
ID: StRS-022
Titel: Datenschutz und Datensicherheit (DSGVO)
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Datenschutzbeauftragter, Administrator
Vorbedingung: –
Fakt: Es existieren DsgvoWebServiceBL (Administration/Documents/Dsgvo), der Ordner Administration/DataSecurity sowie ein Zugriffs-/Änderungsprotokoll für gespeicherte Kundenpasswörter (PasswordManagementAccessLogBL, PasswordManagementLogBL).
Aussage: Das System soll Datenschutzprozesse unterstützen (DSGVO-Dokumente) und Zugriffe auf besonders schützenswerte Daten protokollieren.
Ergebnis: Nachweisbare Datenschutz-Dokumentation und Zugriffsprotokolle.
Belege:
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementAccessLogBL.cs – Begründung: implementiertes Zugriffsprotokoll auf Passwörter.
- [SEKUNDÄR] src/backend/Centron.BL/WebServices/Administration/Documents/Dsgvo/DsgvoWebServiceBL.cs (Dateiname/Klasse) – Begründung: DSGVO-Funktionsbereich existiert.
Prüfidee: Abruf eines gespeicherten Passworts erzeugt einen AccessLog-Eintrag mit Benutzer und Zeit.
Tracelinks: SyRS-100, SyRS-101
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – gesetzliche Anforderung.
Status: belegt
```
```
ID: StRS-023
Titel: Revisionsfähigkeit durch Historien und Belegversionen
Ebene: StRS
Typ: nicht-funktional
Qualitätsmerkmal: Zuverlässigkeit (Nachvollziehbarkeit/Auditierbarkeit)
Akteur: Geschäftsführung, Wirtschaftsprüfer
Vorbedingung: –
Fakt: Jede Belegänderung wird als vollständige Kopie in *KopfVersions/*PosVersions-Tabellen versioniert (docs receipts-backend-architecture, AssetHeadDAO.SaveAssetVersion); ChangeTrackingEventListener schreibt feldgenaue ChangeLog-Einträge; Belege tragen Audit-Felder (CreatedBy/ChangedBy/At); Tickets führen Historie (HelpdeskHistoryBL).
Aussage: Das System soll Änderungen an Belegen und wesentlichen Objekten versioniert bzw. feldgenau protokollieren, sodass frühere Zustände nachvollziehbar sind.
Ergebnis: Zu jedem Beleg sind alle historischen Versionen einsehbar.
Belege:
- [PRIMÄR] src/backend/Centron.DAO/ChangeTracking/ChangeTrackingEventListener.cs, Methode OnPreUpdate (erzeugt ChangeLog bei Feldänderung) – Begründung: durchgesetztes feldgenaues Änderungsprotokoll.
- [PRIMÄR] SSMS_DB_SCHEMA.sql, Tabellen RechKopfVersions/RechPosVersions u. a. – Begründung: Versionstabellen existieren im Schema.
- [SEKUNDÄR] docs/reference/receipts/receipts-backend-architecture.md (Version Tables 1:1) – Begründung: dokumentierter Versionierungsmechanismus.
Prüfidee: Rechnung zweimal ändern; zwei Versionssätze in RechKopfVersions, ChangeLog enthält Feldänderungen.
Tracelinks: SyRS-015, SyRS-102
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – GoBD-/Audit-Anforderung.
Status: belegt
```
```
ID: StRS-024
Titel: Mandanten- und Filialfähigkeit
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Geschäftsführung, Administrator
Vorbedingung: –
Fakt: MandatorBL und BranchBL existieren; Belege tragen BranchI3D mit Herkunftslogik (ReceiptBL.GetBranchForNewReceipt nach BranchOrigin Creator/Adviser2); Nummernkreise, Läger, Rechte („nur eigene Filiale") und Erlöskonten (BranchRevenueAndExpenseAccountBL) sind filialbezogen.
Aussage: Das System soll mehrere Mandanten und Filialen abbilden; Belege, Nummernkreise, Läger und Berechtigungen sollen filialbezogen steuerbar sein.
Ergebnis: Filialen arbeiten getrennt mit eigenen Nummern/Lägern; übergreifende Auswertung bleibt möglich.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs, Methoden GetBranchForNewReceipt / UpdateReceiptNumber (Nummernkreis je Branch) – Begründung: durchgesetzte Filialzuordnung.
- [PRIMÄR] src/backend/Centron.BL/Administration/Company/BranchBL.cs, MandatorBL.cs – Begründung: implementierte Organisationsstämme.
Prüfidee: Zwei Filialen mit eigenen Nummernkreisen; Belege erhalten filialspezifische Nummern.
Tracelinks: SyRS-013, SyRS-110
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – im SaaS-Ziel als Mandanten-/Standortmodell.
Status: belegt
```
```
ID: StRS-025
Titel: Sichere Verwaltung von Kundenzugangsdaten
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Servicetechniker, Administrator
Vorbedingung: Berechtigung auf den Passwortbereich.
Fakt: PasswordManagementBL speichert Zugangsdaten mit Entschlüsselungsfunktion (GetDecryptedPassword) und getrennten Protokollen für Zugriffe (AccessLog) und Änderungen (Log); Typen/Schlagworte strukturieren die Einträge.
Aussage: Das System soll Zugangsdaten zu Kundensystemen verschlüsselt speichern, den Zugriff berechtigungsabhängig gewähren und jeden Abruf protokollieren.
Ergebnis: Zugangsdaten sind zentral, geschützt und auditierbar verfügbar.
Belege:
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementBL.cs, Methode GetDecryptedPassword – Begründung: implementierte ver-/entschlüsselte Ablage.
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementAccessLogBL.cs – Begründung: durchgesetztes Zugriffsprotokoll.
Prüfidee: Passwortabruf erzeugt AccessLog; Datenbankfeld enthält keinen Klartext.
Tracelinks: SyRS-101
Konsolidierung: Kandidat: PasswordManager (BL/PasswordManager) und PasswordManagementArea adressieren denselben Gegenstand – im Ziel ein Konzept.
Übernahmewürdigkeit: übernehmen – sicherheitskritische Kernfunktion für Systemhäuser.
Status: belegt
```
```
ID: StRS-026
Titel: Telefonie-Integration am Arbeitsplatz
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Innendienst, Helpdesk; TK-Anlage (TAPI)
Vorbedingung: TAPI-Treiber verfügbar und konfiguriert.
Fakt: PhoneCallBL erzeugt/synchronisiert Anrufdatensätze und sucht Kontakte per Rufnummer (SearchContactPersonByPhoneNumberV2); assemblies/tapi und docs/reference/architecture/tapi.md existieren.
Aussage: Das System soll ein- und ausgehende Telefonate erkennen, dem Anrufer Kunden/Kontakte zuordnen und Anrufe protokollieren.
Ergebnis: Anrufbezogene Vorgangsbearbeitung ohne manuelle Suche.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Tapi/PhoneCallBL.cs (CreatePhoneCall, SearchContactPersonByPhoneNumberV2, SyncPhoneCalls) – Begründung: implementierte Telefonie-Logik.
- [KONTEXT] docs/reference/architecture/tapi.md – Begründung: Architekturdokumentation der TAPI-Anbindung.
Prüfidee: Simulierter Anruf mit bekannter Nummer öffnet den passenden Kontakt.
Tracelinks: SyRS-083
Konsolidierung: nein
Übernahmewürdigkeit: Workaround – TAPI ist Windows-/Desktop-gebunden; im Web-Ziel durch CTI-/WebRTC-Ansatz zu ersetzen, fachliche Funktion bleibt.
Status: belegt
```
```
ID: StRS-027
Titel: Elektronische Rechnungsstellung (XRechnung/ZUGFeRD)
Ebene: StRS
Typ: Schnittstelle
Qualitätsmerkmal:
Akteur: Buchhaltung; öffentliche/gewerbliche Rechnungsempfänger
Vorbedingung: Rechnung ist fakturiert; Empfänger verlangt E-Rechnung.
Fakt: Es existieren eine eigene ZUGFeRD-Implementierung (docs/guides/development/xrechnung.md: „instead of creating our own implementation"), Feldzuordnungsdokumente (docs/reference/zugferd-field-mapping.md, zugferd-feldzuordnung-anwender.md) und die österreichische ebInterface-API (src/apis/Centron.Api.EbInterface).
Aussage: Das System soll Ausgangsrechnungen als strukturierte E-Rechnungen (ZUGFeRD/XRechnung, ebInterface für AT) erzeugen können.
Ergebnis: Normkonforme E-Rechnungsdatei zur Rechnung.
Belege:
- [PRIMÄR] src/apis/Centron.Api.EbInterface (Projekt) – Begründung: implementierte E-Rechnungs-Schnittstelle ebInterface.
- [SEKUNDÄR] docs/reference/zugferd-field-mapping.md – Begründung: dokumentierte Feldzuordnung der eigenen ZUGFeRD-Erzeugung.
- [KONTEXT] docs/guides/development/xrechnung.md – Begründung: bestätigt eigene ZUGFeRD/XRechnung-Implementierung.
Prüfidee: Erzeugte XRechnung mit KOSIT-Validator prüfen.
Tracelinks: SyRS-025
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – gesetzliche Pflicht (B2G, ab 2025ff B2B-Empfangspflicht in DE).
Status: belegt
```
```
ID: StRS-028
Titel: KI-gestützte Assistenzfunktionen
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Helpdesk-Mitarbeiter; KI-Dienste (OpenAI-kompatibel)
Vorbedingung: KI-Anbindung konfiguriert und lizenziert.
Fakt: ArtificialIntelligence enthält OpenAiApiClient, TicketCategoryApiClient, TextRatingApiClient, ChatModelApiClient; Nexus-ServiceBoard enthält TicketAiSummary; TelemetryBL erfasst KI-Toolnutzung.
Aussage: Das System soll KI-Dienste für Ticket-Kategorisierung, Textbewertung und Ticket-Zusammenfassungen anbinden und deren Nutzung erfassen.
Ergebnis: KI-Vorschläge in der Ticketbearbeitung; Nutzung ist ausgewertet.
Belege:
- [PRIMÄR] src/backend/Centron.BL/ArtificialIntelligence/TicketCategoryApiClient.cs, OpenAiApiClient.cs – Begründung: implementierte KI-Clients.
- [PRIMÄR] src/nexus/CentronNexus/ServiceBoard/TicketAiSummary (Ordner) – Begründung: KI-Zusammenfassung im Webclient.
Prüfidee: Ticket-Zusammenfassung im ServiceBoard abrufen; Telemetrie-Eintrag entsteht.
Tracelinks: SyRS-120
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen – Differenzierungsmerkmal; Anbieterwahl im Ziel offen.
Status: belegt
```
@@ -0,0 +1,80 @@
# Messprotokoll – Versuch 01 (V1 Baseline) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf brach mit `is_error: true` und HTTP 429 ab: „You've hit your session limit ·
> resets 10:50pm (Europe/Berlin)". Erzeugt wurden **3 von sieben** geforderten Ergebnisdateien; der Lauf brach mitten in der Bearbeitung ab. Verbraucht wurden
> bis zum Abbruch **7.997.215 Tokens**.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T20:00:08.8552900+02:00
- **Endzeit:** 2026-08-26T20:28:31.6394457+02:00
- **Dauer gesamt:** 00:07:4x — bis zum Kontingentabbruch
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **Modell (angefordert):** `claude-fable-5`
- **Modelle (tatsächlich eingesetzt):** `claude-fable-5` 7.990.250 (99.91 %), `claude-haiku-4-5-20251001` 6.965 (0.09 %)
- **Kontrolle Modell:** bestanden
- **Effort:** `high`
- **Agentenmodus:** `solo` (V1)
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **Hintergrund-Wartezeit:** `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`
- **Parallele Läufe:** **ja** – alle vier Läufe der Welle liefen gleichzeitig
- **Subagenten:** keine (`spawned` = 0)
## Verbrauch
| Messgröße | `claude-fable-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 128 | 6.945 | 7.073 |
| Output-Tokens | 127.802 | 20 | 127.822 |
| Cache-Write-Tokens | 279.983 | 0 | 279.983 |
| Cache-Read-Tokens | 7.582.337 | 0 | 7.582.337 |
| **Tokens gesamt** | **7.990.250** | **6.965** | **7.997.215** |
**Tokens gesamt: 7.997.215** — real angefallen und deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Der Lauf brach vor Abschluss ab. Im vorhandenen **Teilbestand** stehen **109 Anforderungen**. Die Zahl ist **nicht** mit vollständigen Läufen vergleichbar – es fehlen `SwRS.md`, `Traceability.md`, `Hypothesen.md`, `Glossar.md`. Die maschinelle Auswertung liegt zur Vollständigkeit unter `_meta/anforderungen.md`, geht aber nicht in Vergleiche ein.
## Ergebnis
- **Gültigkeit:** **Fehlmessung** – API-Abbruch (HTTP 429, Session-Kontingent); nur 3 von sieben Artefakten erzeugt
- **Status:** `is_error` = true, `terminal_reason` = `api_error`, `api_error_status` = 429
- **Session-ID:** `1d368e93-cb25-434c-9365-b76eace2ee17`
- **Turns:** 94
- **Permission-Denials:** 0
- **Erzeugte Dateien:** 3 von sieben geforderten Artefakten:
| Datei | Größe |
|---|---:|
| `Analysebericht.md` | 24.343 B |
| `StRS.md` | 42.134 B |
| `SyRS.md` | 105.262 B |
Es fehlen: `SwRS.md`, `Traceability.md`, `Hypothesen.md`, `Glossar.md`
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „You've hit your session limit · resets 10:50pm (Europe/Berlin)"
## Anmerkungen/Auffälligkeiten
**1. Kontingentabbruch, nicht Laufversagen.** Vier Läufe wurden am 26.08. um 19:59 gleichzeitig
gestartet; alle vier liefen in dieselbe Grenze. Zusammen hatten sie zu diesem Zeitpunkt
297,4 Mio. Tokens verbraucht, davon allein 204,4 Mio. im Lauf `45dd`. Die Parallelität von vier
Läufen – darunter einer mit extremer Delegation – hat das Kontingent gerissen.
**2. Konsequenz für den Versuchsaufbau:** Die verbleibenden Zellen werden **seriell** gefahren.
Der erste serielle Lauf danach (`opus-5/solo/high`, `2269`) lief mit 38,1 Mio. Tokens sauber durch.
**3. Zelle inzwischen gültig belegt.** Der Wiederholungslauf `02_Lauf_2026-08-27_002430_v7.0.0-35a4`
war erfolgreich: 241 Anforderungen, 98,3 % mit Primärbeleg, 30,6 Mio. Tokens – allerdings mit
7:03 h Wanduhrzeit, weil er mehrfach stundenweise auf Kontingent-Reset-Fenster wartete.
@@ -0,0 +1 @@
{"is_error":true,"duration_api_ms":1549743,"num_turns":94,"stop_reason":"stop_sequence","session_id":"1d368e93-cb25-434c-9365-b76eace2ee17","total_cost_usd":19.580422,"usage":{"input_tokens":128,"cache_creation_input_tokens":279983,"cache_read_input_tokens":7582337,"output_tokens":127802,"output_tokens_details":{"thinking_tokens":21913},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":279983,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":374,"cache_read_input_tokens":247654,"cache_creation_input_tokens":32329,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":32329},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6945,"outputTokens":20,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007045,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-fable-5":{"inputTokens":128,"outputTokens":127802,"cacheReadInputTokens":7582337,"cacheCreationInputTokens":279983,"webSearchRequests":0,"costUSD":19.573377,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-fable-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"api_error","fast_mode_state":"off","fast_mode_disabled_reason":"extra_usage_disabled","subagent_stats":{"spawned":0,"requested":{"background":0,"foreground":0,"unset":0},"started_in_background":0,"max_depth":0,"spawned_by_subagents":0,"completed":0,"failed":0,"killed":{"parent":0,"user":0,"system":0},"refused":{"depth_limit":0,"concurrency_limit":0,"budget":0},"by_type":{}},"subtype":"success","api_error_status":429,"result":"You've hit your session limit · resets 10:50pm (Europe/Berlin)","type":"result","duration_ms":1701146,"uuid":"910fddce-feda-4375-862c-350dbb92f47b","queued_turn_count":0}
@@ -0,0 +1,65 @@
## 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 |
|---|---:|---:|
| StRS | 28 | 25,7 % |
| SyRS | 81 | 74,3 % |
| SwRS | 0 | 0,0 % |
| **Gesamt** | **109** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 60 | 55,0 % |
| Schnittstelle | 15 | 13,8 % |
| Sicherheit | 15 | 13,8 % |
| nicht-funktional | 10 | 9,2 % |
| Daten | 9 | 8,3 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 180 |
| davon `PRIMÄR` | 145 (80,6 %) |
| davon `SEKUNDÄR` | 28 (15,6 %) |
| davon `KONTEXT` | 7 (3,9 %) |
| Belege je Anforderung (Median) | 2 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 108 (99,1 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 102 | 93,6 % |
| workaround | 4 | 3,7 % |
| sonderfall | 1 | 0,9 % |
| veraltet | 2 | 1,8 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 101 | 92,7 % |
| als `HYPOTHESE` gekennzeichnet | 8 | 7,3 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 11 | 10,1 % |
| mit ISO-25010-Qualitätsmerkmal | 10 | 9,2 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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 28 ungedeckt: SyRS-008 |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 109 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 109 von 109 mit Tracelinks (100,0 %) |
@@ -0,0 +1,177 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien sowie das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis.
Nicht verfügbar sind: Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-fable-5\solo\high\02_Lauf_2026-08-26_195958_v7.0.0-77a1\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1 @@
2026-08-26T20:28:31.6394457+02:00
@@ -0,0 +1,492 @@
# Analysebericht – Reverse Requirements Engineering c-entron ERP-Suite
**Lauf:** V1 Baseline (Prompt-only), Iteration 02, 2026-08-27
**Untersuchungsgegenstand:** Gesamte Codebasis unter `C:\DEV\MasterArbeit\QuellCode\CentronERP` (statische Analyse, keine Ausführung)
---
## Schritt 0 – Modulinventar
Das Inventar wurde vor der ersten Anforderung erstellt. Es basiert auf der Verzeichnisstruktur der
Solution (`Centron.sln`), insbesondere der fachlichen Modulordner in `src/backend/Centron.BL`
(Geschäftslogikschicht), sowie den weiteren Schichten (DAO, Entities, Gateway, WPF-Client,
Blazor-Web „Nexus", Webservice, API-Integrationsprojekte) und Begleitartefakten (DB-Schema,
Deployment, Doku). Pfade sind relativ zum Arbeitsverzeichnis.
Legende Spalte „Modul": M-Nummer = Bezugsgröße für Abdeckungstabelle und Mindestabdeckung.
### A. Geschäftslogik (src/backend/Centron.BL)
| Nr. | Modul / Komponente | Pfad | Fachliche Aufgabe (1 Satz) |
|---|---|---|---|
| M-001 | Accounting (Bankkonten) | src/backend/Centron.BL/Accounting | Verwaltung der Bankkonten des Unternehmens (BankAccountBL). |
| M-002 | Accounts (Konten-/Adressstamm) | src/backend/Centron.BL/Accounts | Verwaltung von Konten (Kunden/Adressen), Kontakten, Kontenverträgen, Kampagnen, Kontenmigration und Aktivitäten. |
| M-003 | Administration: AccessTokens | src/backend/Centron.BL/Administration/AccessTokens | Verwaltung von API-/Zugriffstokens für externe Zugriffe. |
| M-004 | Administration: Applications | src/backend/Centron.BL/Administration/Applications | Verwaltung registrierter (Client-)Anwendungen. |
| M-005 | Administration: ArtificialIntelligence | src/backend/Centron.BL/Administration/ArtificialIntelligence | Administrative Konfiguration der KI-Funktionen (Modelle, API-Anbindung). |
| M-006 | Administration: BackgroundServices | src/backend/Centron.BL/Administration/BackgroundServices | Konfiguration und Überwachung von Hintergrunddiensten (Jobs). |
| M-007 | Administration: BookKeepingAccountSystems | src/backend/Centron.BL/Administration/BookKeepingAccountSystems | Verwaltung der Buchhaltungs-Kontenrahmen (z. B. SKR) für die FiBu-Übergabe. |
| M-008 | Administration: CentronConfigDb | src/backend/Centron.BL/Administration/CentronConfigDb | Zugriff auf die zentrale Konfigurationsdatenbank (mandantenübergreifende Konfiguration). |
| M-009 | Administration: Company/CompanyInformations | src/backend/Centron.BL/Administration/Company, .../CompanyInformations | Verwaltung der eigenen Firmenstammdaten (Firmen, Filialen, Firmeninformationen). |
| M-010 | Administration: Connections | src/backend/Centron.BL/Administration/Connections | Verwaltung technischer Verbindungen (DB-/Dienstverbindungen). |
| M-011 | Administration: Customization | src/backend/Centron.BL/Administration/Customization | Kundenspezifische Anpassungen der Anwendung (Custom-Verhalten). |
| M-012 | Administration: DataSecurity | src/backend/Centron.BL/Administration/DataSecurity | Datensicherheits-/Datenschutzfunktionen (DataSecurityBL). |
| M-013 | Administration: Documents/FileManagement | src/backend/Centron.BL/Administration/Documents, .../FileManagement | Dokumentenablage und Dateiverwaltung (Speicherorte, Dateioperationen). |
| M-014 | Administration: Employees | src/backend/Centron.BL/Administration/Employees | Administrative Mitarbeiterverwaltung (Anlage, Einstellungen). |
| M-015 | Administration: Environments | src/backend/Centron.BL/Administration/Environments | Verwaltung von Umgebungen (z. B. Test-/Produktivumgebung). |
| M-016 | Administration: Licensing | src/backend/Centron.BL/Administration/Licensing | Lizenzverwaltung und Lizenzprüfung der ERP-Installation (LicenseManager). |
| M-017 | Administration: Logins/Auth | src/backend/Centron.BL/Administration/Logins | Benutzer-Authentifizierung: Logins, Auth-Tickets, Zwei-Faktor, Web-Accounts, EntraID-Anbindung. |
| M-018 | Administration: Mandatory | src/backend/Centron.BL/Administration/Mandatory | Verwaltung der Mandanten (Mandatoren) der Installation. |
| M-019 | Administration: Masterdata | src/backend/Centron.BL/Administration/Masterdata | Zentrale Stammdaten der Administration (Basistabellen). |
| M-020 | Administration: NetworkDiagnostics | src/backend/Centron.BL/Administration/NetworkDiagnostics | Netzwerk-Diagnosefunktionen für den Support. |
| M-021 | Administration: PerformanceTests/Profiling | src/backend/Centron.BL/Administration/PerformanceTests, .../Profiling | Performancemessung und Profiling der Anwendung. |
| M-022 | Administration: PhoneSettings | src/backend/Centron.BL/Administration/PhoneSettings | Telefonie-Einstellungen (TAPI-Konfiguration). |
| M-023 | Administration: Portal | src/backend/Centron.BL/Administration/Portal | Anbindung/Verwaltung eines (Kunden-)Portals. |
| M-024 | Administration: Rights | src/backend/Centron.BL/Administration/Rights | Benutzerrechte- und Benutzergruppenverwaltung (AppRights, Rechtebaum). |
| M-025 | Administration: Scripts/SQLManagement | src/backend/Centron.BL/Administration/Scripts, .../SQLManagement | Verwaltung und Ausführung administrativer SQL-Skripte. |
| M-026 | Administration: Settings | src/backend/Centron.BL/Administration/Settings | Systemweite und benutzerbezogene Einstellungen. |
| M-027 | Administration: Themes | src/backend/Centron.BL/Administration/Themes | Verwaltung der UI-Themes. |
| M-028 | Administration: WebServiceConfiguration | src/backend/Centron.BL/Administration/WebServiceConfiguration | Konfiguration des c-entron Webservice. |
| M-029 | AppointmentRequests | src/backend/Centron.BL/AppointmentRequests | Terminanfragen (Vereinbarung von Terminen mit Externen). |
| M-030 | ArtificialIntelligence | src/backend/Centron.BL/ArtificialIntelligence | KI-Funktionen: Chat-Anbindung an LLM-Anbieter, Modellkatalog, Tool-Aufrufe. |
| M-031 | BusinessPartner | src/backend/Centron.BL/BusinessPartner | Lieferanten-Suche und Lieferanten-Assets (Geschäftspartnersicht). |
| M-032 | Buying | src/backend/Centron.BL/Buying | Einkaufssicht auf Distributoren (externe Bezugsquellen). |
| M-033 | Calendar | src/backend/Centron.BL/Calendar | Kalenderfunktionen (Termine der Mitarbeiter). |
| M-034 | CentronIcons | src/backend/Centron.BL/CentronIcons | Verwaltung der in der Anwendung verwendeten Icons. |
| M-035 | CentronNexus (BL) | src/backend/Centron.BL/CentronNexus | Geschäftslogik-Anteil für den Webclient „c-entron Nexus". |
| M-036 | ChangeTracking | src/backend/Centron.BL/ChangeTracking | Import-Historie und Änderungsverfolgung. |
| M-037 | Chats | src/backend/Centron.BL/Chats | Interne Chat-Funktion. |
| M-038 | CheckListArea | src/backend/Centron.BL/CheckListArea | Checklisten inkl. Änderungsprotokoll. |
| M-039 | Core (BL-Kern) | src/backend/Centron.BL/Core | Kernfunktionen der BL: Kryptographie-Hilfsfunktionen, Platzhalter-Ersetzung. |
| M-040 | CountryArea | src/backend/Centron.BL/CountryArea | Länder- und Bundesland-Stammdaten. |
| M-041 | CPra | src/backend/Centron.BL/CPra | Konnektor „CPra" (Konfiguration und Anbindung eines Externsystems). |
| M-042 | CustomerArea | src/backend/Centron.BL/CustomerArea | Kundenbezogene Nebenstammdaten: Branchen, Interessen, Produkte, RMA-Abwicklung. |
| M-043 | Customizations (CustomTables) | src/backend/Centron.BL/Customizations | Kundenindividuelle Zusatztabellen (Custom Tables). |
| M-044 | DataExchange | src/backend/Centron.BL/DataExchange | Datenaustausch: FiBu-Export/-Import, DocBee-/DocuForm-Konnektoren, E-Rechnungs-Upload, WebHooks. |
| M-045 | Devices | src/backend/Centron.BL/Devices | Geräteverwaltung je Konto (AccountDevice). |
| M-046 | DocuBoard | src/backend/Centron.BL/DocuBoard | Asset-Management-Anbindung (AD-Systembenutzer, Artikelzuordnung, Partner). |
| M-047 | DocumentationArea | src/backend/Centron.BL/DocumentationArea | Dokumentationen zu Objekten (Systemdokumentation). |
| M-048 | EDI | src/backend/Centron.BL/EDI | Elektronischer Datenaustausch mit Distributoren (Alltron, ALSO, Concerto, EGIS, Komsa u. a.): Bestellungen, Auftragsbestätigungen. |
| M-049 | EmployeeArea | src/backend/Centron.BL/EmployeeArea | Mitarbeiterstamm: App-Benutzer, Abteilungen, Urlaub, RFID-Token, Team-Management. |
| M-050 | ExpectedEvents | src/backend/Centron.BL/ExpectedEvents | Erwartete Ereignisse (Überwachung ausbleibender Ereignisse). |
| M-051 | ExternalHelpdesk | src/backend/Centron.BL/ExternalHelpdesk | Konfiguration externer Helpdesk-Anbindungen. |
| M-052 | ExternalToolsBL | src/backend/Centron.BL/ExternalToolsBL | Einbindung externer Tools in die Anwendung. |
| M-053 | Finances | src/backend/Centron.BL/Finances | Finanzen: Zahlungseingänge, Onlinebanking (FinAPI), Zahlungen, Produkt-Lebenszyklus. |
| M-054 | Gateway (BL) | src/backend/Centron.BL/Gateway | Kundenspezifische Gateway-Logik (CustomGateway). |
| M-055 | GUI (BL-Anteil) | src/backend/Centron.BL/GUI | UI-nahe BL: Bestellimport (EDI), UI-Profile, Benutzer-Grid-Layouts. |
| M-056 | IndexSearch | src/backend/Centron.BL/IndexSearch | Volltextsuche über Konten und Tickets (Lucene-Index, GermanAnalyzer). |
| M-057 | Integrations | src/backend/Centron.BL/Integrations | Integrationen (EsCustomerGroup, EsRole – externes Shopsystem). |
| M-058 | ItPlanner | src/backend/Centron.BL/ItPlanner | IT-Planner (Checklisten-basierte Planung virtueller Objekte). |
| M-059 | Logistics | src/backend/Centron.BL/Logistics | Logistikeinstellungen und Bestandsführung (StockBL). |
| M-060 | Mail | src/backend/Centron.BL/Mail | E-Mail-Verarbeitung: Exchange/EWS-Anbindung, Mail-Erzeugung, Signaturen, Domain-Blacklist. |
| M-061 | MailScanner | src/backend/Centron.BL/MailScanner | Automatisches Scannen von Mailpostfächern (z. B. zur Ticketerzeugung). |
| M-062 | Mailings | src/backend/Centron.BL/Mailings | Serien-Mailings auf Basis von Vorlagen. |
| M-063 | MassUpdate | src/backend/Centron.BL/MassUpdate | Massenänderungen an Datenobjekten. |
| M-064 | Mobile | src/backend/Centron.BL/Mobile | Unterstützung mobiler Clients. |
| M-065 | Modules | src/backend/Centron.BL/Modules | Verwaltung der freigeschalteten Programm-Module (Modul-/Kategorieverwaltung). |
| M-066 | MyCentron | src/backend/Centron.BL/MyCentron | Persönlicher Bereich: Dashboards, Quick Notes, zuletzt verwendete Objekte, Schedulings. |
| M-067 | MyDay | src/backend/Centron.BL/MyDay | „Mein Tag"-Übersicht (Tagesnotifications, Reports, Supremo-Fernwartung). |
| M-068 | NexusNotifications | src/backend/Centron.BL/NexusNotifications | Benachrichtigungen im Webclient (SignalR-Hub). |
| M-069 | NexusTicketViews | src/backend/Centron.BL/NexusTicketViews | Konfigurierbare Ticket-Ansichten im Webclient. |
| M-070 | Notifications | src/backend/Centron.BL/Notifications | Benutzerbenachrichtigungen im Client. |
| M-071 | ObjectExternalReferences | src/backend/Centron.BL/ObjectExternalReferences | Externe Referenzen auf c-entron-Objekte (Fremdschlüssel zu Drittsystemen). |
| M-072 | Outlook | src/backend/Centron.BL/Outlook | Outlook-Integration (Asset-Suche aus Outlook). |
| M-073 | PasswordManagementArea | src/backend/Centron.BL/PasswordManagementArea | Passwortverwaltung für Kunden-Zugangsdaten inkl. Zugriffs- und Änderungsprotokoll. |
| M-074 | PasswordManager | src/backend/Centron.BL/PasswordManager | Anbindung externer Passwortmanager. |
| M-075 | Processes | src/backend/Centron.BL/Processes | Prozessverwaltung (Geschäftsprozess-Objekte). |
| M-076 | ProductMatrix | src/backend/Centron.BL/ProductMatrix | Produktmatrix (Zuordnung Produkte zu Konten). |
| M-077 | Production | src/backend/Centron.BL/Production | Produktion/Fertigungsaufträge (ProductionOrder). |
| M-078 | Projects | src/backend/Centron.BL/Projects | Projektverwaltung. |
| M-079 | Purchasing | src/backend/Centron.BL/Purchasing | Einkauf: Bestellvorschläge, Lieferanten, Einkaufseinstellungen, filialbezogene Lieferantenbestellungen. |
| M-080 | ReportEngine | src/backend/Centron.BL/ReportEngine | Reporterzeugung (FastReport), PDF-Export inkl. ZUGFeRD-PDF-Generierung. |
| M-081 | Reporting | src/backend/Centron.BL/Reporting | Verwaltung der Reports (ReportsBL). |
| M-082 | RiverDivo | src/backend/Centron.BL/RiverDivo | Anbindung „Riverbird/RiverDivo" (Vertragsartikel-Referenzen, River-Client). |
| M-083 | Sales: Receipts (Belegwesen) | src/backend/Centron.BL/Sales/Receipts | Belegwesen: Angebote, Aufträge, Rechnungen, Lieferscheine, Gutschriften, Anzahlungen, Abhollisten sowie Lieferantenbelege (Bestellungen, Lieferanten-Rechnungen/-Gutschriften). |
| M-084 | Sales: CustomerAssets (Verträge) | src/backend/Centron.BL/Sales/CustomerAssets | Kundenverträge und Vertragsabrechnung: Verträge, automatische Fakturierung, Timer-Billing, vertragsbezogene Belege. |
| M-085 | Sales: Customers (CRM) | src/backend/Centron.BL/Sales/Customers | Kundenverwaltung/CRM: Adressen, Kontakte, CRM-Projekte, Kundendetails, Textbausteine. |
| M-086 | Sales: Support (Helpdesk) | src/backend/Centron.BL/Sales/Support | Helpdesk/Ticketsystem inkl. Eskalationslogik und Ticketprozessen. |
| M-087 | Sales: CashBooks | src/backend/Centron.BL/Sales/CashBooks | Kassenbuchführung. |
| M-088 | Sales: Marketing | src/backend/Centron.BL/Sales/Marketing | Marketingfunktionen im Vertrieb. |
| M-089 | Sales: Calendar | src/backend/Centron.BL/Sales/Calendar | Vertriebsbezogene Kalenderfunktionen. |
| M-090 | Sales: DocumentationWizardArea | src/backend/Centron.BL/Sales/DocumentationWizardArea | Assistent zur Dokumentationserstellung im Vertriebskontext. |
| M-091 | Sales: HourlySurchargeRatesBL | src/backend/Centron.BL/Sales/HourlySurchargeRatesBL | Stundenzuschlagssätze (z. B. für Servicezeiten). |
| M-092 | Security (PdfSigning) | src/backend/Centron.BL/Security | Digitale Signatur von PDF-Dokumenten. |
| M-093 | SelfCare | src/backend/Centron.BL/SelfCare | SelfCare-Portalfunktionen (Web-Anfrageseiten für Endkunden). |
| M-094 | Services | src/backend/Centron.BL/Services | Dienste: Workflows (Prozess-Engine), CTime-Zeiterfassungs-Konnektor, Datenqualität, Tabellen-Cache. |
| M-095 | SocialMedia | src/backend/Centron.BL/SocialMedia | Social-Media-Profile von Personen/Konten. |
| M-096 | Start | src/backend/Centron.BL/Start | Anwendungsstart-Logik (StartBL). |
| M-097 | Statistics | src/backend/Centron.BL/Statistics | Statistiken: Umsatz, Mitarbeiterauslastung, Vertragsauswertung, MSP-Auswertungen. |
| M-098 | Storage | src/backend/Centron.BL/Storage | Inventur (InventoryArticlePool) und Lagerort-Logik. |
| M-099 | SystemArea | src/backend/Centron.BL/SystemArea | Systemtabellen (I3D-Systemtabelle). |
| M-100 | Tags | src/backend/Centron.BL/Tags | Verschlagwortung von Objekten (Tags). |
| M-101 | Tapi | src/backend/Centron.BL/Tapi | Telefonie-Integration (Anrufe, PhoneCallBL). |
| M-102 | TaskManager | src/backend/Centron.BL/TaskManager | Aufgabenverwaltung mit Aktions-Handlern (Helpdesk-/Report-Aktionen). |
| M-103 | Telemetry | src/backend/Centron.BL/Telemetry | Telemetrie-Erfassung der Anwendungsnutzung. |
| M-104 | TextModuleArea | src/backend/Centron.BL/TextModuleArea | Textbausteine und Anrede-/Grußformel-Ersetzung. |
| M-105 | TicketProjects | src/backend/Centron.BL/TicketProjects | Ticket-Projekte (Bündelung von Tickets). |
| M-106 | Time | src/backend/Centron.BL/Time | Zeitsteuerungs-Einstellungen (TimingSettings). |
| M-107 | ToDoArea | src/backend/Centron.BL/ToDoArea | ToDo-Verwaltung über Objektarten hinweg. |
| M-108 | Tools | src/backend/Centron.BL/Tools | Werkzeugverwaltung (ToolBL). |
| M-109 | TradePool | src/backend/Centron.BL/TradePool | „TradePool"-Handelsbörse (XML-basierter Austausch von Handelsdaten). |
| M-110 | Transactions | src/backend/Centron.BL/Transactions | Transaktionsobjekte (TransactionBL). |
| M-111 | TwoFactorAuthenticator | src/backend/Centron.BL/TwoFactorAuthenticator | Zwei-Faktor-Authentifizierung (TOTP). |
| M-112 | Urls | src/backend/Centron.BL/Urls | Verwaltung einfacher URL-Objekte (Weblinks je Objekt). |
| M-113 | VideoPortal | src/backend/Centron.BL/VideoPortal | Zuordnung von Schulungsvideos (Videoportal). |
| M-114 | VoucherManagement | src/backend/Centron.BL/VoucherManagement | Gutscheinverwaltung: Barcodes mit Status frei/ausgegeben/eingelöst. *(Beschreibung nach Detailanalyse präzisiert)* |
| M-115 | Warehousing | src/backend/Centron.BL/Warehousing | Artikelstamm und Lager: Artikel, EAN-Codes, Preise/Aktionspreise, Artikelhistorie, Umweltschutz-Angaben, Artikelimport. |
| M-116 | WebLinks | src/backend/Centron.BL/WebLinks | Aktions-Weblinks (z. B. Erinnerungen, Kontoaktivitäten per Link). |
| M-117 | WebServices (BL) | src/backend/Centron.BL/WebServices | Geschäftslogik der Webservice-Endpunkte (Datenbereitstellung für Web/Mobile/Nexus). |
| M-118 | WebSuite | src/backend/Centron.BL/WebSuite | Konfiguration der Web-Suite (Webmenü, Web-Einstellungen, Web-HD-Fragen). |
| M-119 | WebVersion | src/backend/Centron.BL/WebVersion | Versionsverwaltung der Webanwendung. |
| M-120 | Helpers (BL) | src/backend/Centron.BL/Helpers | Technische Hilfsklassen (Graph-Client, PDF-Interaktion, String-/Bild-Helfer). |
| M-121 | Exceptions (BL) | src/backend/Centron.BL/Exceptions | Fachliche Ausnahmen (z. B. TicketExpiredException). |
### B. Weitere Schichten, Anwendungen und Artefakte
| Nr. | Modul / Komponente | Pfad | Fachliche Aufgabe (1 Satz) |
|---|---|---|---|
| M-122 | Centron.DAO (Persistenz) | src/backend/Centron.DAO | Datenzugriffsschicht auf NHibernate-Basis: Mappings, Sessions, Change-Tracking, Repositories, benannte Abfragen. |
| M-123 | Centron.Entities | src/backend/Centron.Entities | Entitätsmodell (persistierte Geschäftsobjekte). |
| M-124 | Centron.Common | src/backend/Centron.Common | Querschnittsbibliothek: Logging, Einstellungen, Berechnungen, Konstanten, Benutzerkontext. |
| M-125 | Centron.Interfaces | src/backend/Centron.Interfaces | Schnittstellen- und Konstantendefinitionen (u. a. Rechte-Konstanten UserRightsConst). |
| M-126 | Centron.Gateway | src/backend/Centron.Gateway | Import-/Export-Gateway: EDI-Formate (Alltron, ALSO, EGIS, Herweck, Komsa), OpenTrans, ZUGFeRD 2.1, Onlinebanking, MSP-Collector, Portal. |
| M-127 | Centron.WPF.UI (+ Extension) | src/centron/Centron.WPF.UI, .../Centron.WPF.UI.Extension | Windows-Desktop-Client (WPF/XAML): Masken, Module, Wizards, Lokalisierung. |
| M-128 | Centron.Controls (+ Preview) | src/shared/Centron.Controls, .../Centron.Controls.Preview | Wiederverwendbare UI-Controls (DevExpress-basiert) inkl. Dokumentvorschau. |
| M-129 | Centron.Core (shared) | src/shared/Centron.Core | Gemeinsame Kernbibliothek von Client und Server. |
| M-130 | CentronNexus (Blazor-Web) | src/nexus/CentronNexus | Webclient „c-entron Nexus" (Blazor): WebCart/Shop, WebOffer, ServiceBoard, Dokument-Signierung, Produktionsauftrags-Management. |
| M-131 | CentronNexus.Host | src/nexus/CentronNexus.Host | Hosting-Anwendung des Nexus-Webclients. |
| M-132 | CentronNexus.OutlookAddIn | src/nexus/CentronNexus.OutlookAddIn | Outlook-Add-In des Nexus-Webclients. |
| M-133 | Centron.Controllers (REST-API) | src/webservice/Centron.Controllers | REST-Controller des c-entron Webservice (versionierte API, Autorisierung). |
| M-134 | Centron.WebServices.Core | src/webservice/Centron.WebServices.Core | Kern des Webservice (Infrastruktur der Dienstschicht). |
| M-135 | Centron.Host (+ Console/WindowsService) | src/webservice/Centron.Host, .../Centron.Host.Console, .../Centron.Host.WindowsService | Hosting des Webservice als Konsole oder Windows-Dienst. |
| M-136 | ConnectionManager | src/webservice/c-entron.misc.ConnectionManager | Verwaltung der Verbindungskonfiguration (Werkzeug). |
| M-137 | Centron.Api.EbInterface | src/apis/Centron.Api.EbInterface | Erzeugung österreichischer E-Rechnungen (ebInterface). |
| M-138 | Centron.Api.Gls | src/apis/Centron.Api.Gls | Versandanbindung GLS (Paketlabel). |
| M-139 | Centron.Api.Shipcloud | src/apis/Centron.Api.Shipcloud | Versandanbindung Shipcloud (Multi-Carrier-Versand). |
| M-140 | Centron.APIs.CopDataAccess | src/apis/Centron.APIs.CopDataAccess | Anbindung „COP" (SOAP-Datenzugriff auf Distributor). |
| M-141 | Centron.APIs.EgisDataAccess | src/apis/Centron.APIs.EgisDataAccess | Anbindung EGIS (Distributor-Datenzugriff). |
| M-142 | Centron.APIs.FinAPI | src/apis/Centron.APIs.FinAPI | Anbindung finAPI (Onlinebanking-REST-Dienst). |
| M-143 | Centron.APIs.IcecatDataAccess | src/apis/Centron.APIs.IcecatDataAccess | Anbindung Icecat (Produktdatenkatalog). |
| M-144 | Centron.APIs.ITscopeDataAccess | src/apis/Centron.APIs.ITscopeDataAccess | Anbindung ITscope (Handelsplattform). |
| M-145 | Centron.Api.docuFORM | Centron.Api.docuFORM | Anbindung docuFORM (Druckerdaten/Managed Print). |
| M-146 | Datenbankschema | SSMS_DB_SCHEMA.sql | SQL-Schema-Dump der c-entron-Datenbank (1558 CREATE TABLE, Constraints, Indizes). |
| M-147 | Deployment/Installer | deployment | Installer (WixSharp) und Deployment-Konfiguration für c-entron und Riverbird. |
| M-148 | Docker/Betrieb | docker | Container-Definitionen für API, Webservice, Demo, Mailcatcher, Regressionstest-DB. |
| M-149 | Scripts | scripts | Hilfs- und Wartungsskripte. |
| M-150 | Dokumentation | docs | Entwickler-/Betriebsdokumentation (Features, Architektur, Security, EDI, Belege). |
| M-151 | Tests | tests | Test-Suiten (Unit, Integration, EndToEnd, Playwright). |
**Hinweis:** Das Inventar wird bei Bedarf ergänzt, aber nicht gekürzt.
---
## Abdeckungstabelle (je Modul des Inventars)
Einstufung: `tief` = mehrere Anforderungen inkl. gelesener Kernlogik der risikorelevanten Pfade; `mittel` = 2-3 Anforderungen auf Basis gelesener Kernmethoden; `flach` = 1-2 Anforderungen auf Basis von Methodensignaturen/ausgewählten Codeausschnitten; `nicht analysiert` = keine Anforderung (mit Begründung).
| Modul | Bezeichnung | Einstufung | Anzahl Anforderungen | Anforderungen |
|---|---|---|---|---|
| M-001 | Accounting (Bankkonten) | mittel | 2 | SwRS-019, SwRS-155 |
| M-002 | Accounts (Konten-/Adressstamm) | mittel | 3 | SwRS-020, SyRS-020, StRS-001 |
| M-003 | Administration: AccessTokens | mittel | 3 | SyRS-017, SwRS-021, StRS-013 |
| M-004 | Administration: Applications | flach | 1 | SwRS-022 |
| M-005 | Administration: ArtificialIntelligence | mittel | 3 | SyRS-019, SwRS-023, StRS-029 |
| M-006 | Administration: BackgroundServices | mittel | 3 | SyRS-018, SwRS-024, StRS-031 |
| M-007 | Administration: BookKeepingAccountSystems | flach | 1 | SwRS-025 |
| M-008 | Administration: CentronConfigDb | flach | 1 | SwRS-026 |
| M-009 | Administration: Company/CompanyInformations | mittel | 3 | SyRS-024, SwRS-027, StRS-033 |
| M-010 | Administration: Connections | flach | 1 | SwRS-028 |
| M-011 | Administration: Customization | mittel | 2 | SwRS-029, StRS-032 |
| M-012 | Administration: DataSecurity | mittel | 3 | SyRS-022, SwRS-030, StRS-030 |
| M-013 | Administration: Documents/FileManagement | mittel | 3 | SwRS-031, SyRS-026, StRS-020 |
| M-014 | Administration: Employees | flach | 1 | SwRS-032 |
| M-015 | Administration: Environments | flach | 1 | SwRS-033 |
| M-016 | Administration: Licensing | tief | 3 | SyRS-003, SwRS-009, StRS-014 |
| M-017 | Administration: Logins/Auth | tief | 9 | SyRS-003, SyRS-004, SyRS-005, SyRS-006, SyRS-007, SwRS-002, SwRS-003, SwRS-005, StRS-013 |
| M-018 | Administration: Mandatory | mittel | 4 | SyRS-012, SwRS-012, SyRS-024, StRS-033 |
| M-019 | Administration: Masterdata | flach | 1 | SwRS-034 |
| M-020 | Administration: NetworkDiagnostics | flach | 1 | SwRS-035 |
| M-021 | Administration: PerformanceTests/Profiling | flach | 1 | SwRS-036 |
| M-022 | Administration: PhoneSettings | mittel | 2 | SwRS-037, SyRS-030 |
| M-023 | Administration: Portal | flach | 1 | SwRS-038 |
| M-024 | Administration: Rights | tief | 7 | SyRS-001, SyRS-002, SyRS-008, SwRS-001, SwRS-004, SwRS-008, StRS-012 |
| M-025 | Administration: Scripts/SQLManagement | flach | 1 | SwRS-039 |
| M-026 | Administration: Settings | mittel | 4 | SyRS-023, SwRS-040, SyRS-050, StRS-032 |
| M-027 | Administration: Themes | flach | 1 | SwRS-041 |
| M-028 | Administration: WebServiceConfiguration | flach | 1 | SwRS-042 |
| M-029 | AppointmentRequests | flach | 1 | SwRS-043 |
| M-030 | ArtificialIntelligence | mittel | 2 | SyRS-019, StRS-029 |
| M-031 | BusinessPartner | flach | 1 | SwRS-044 |
| M-032 | Buying | flach | 1 | SwRS-045 |
| M-033 | Calendar | mittel | 3 | SwRS-046, SyRS-029, SwRS-157 |
| M-034 | CentronIcons | flach | 1 | SwRS-047 |
| M-035 | CentronNexus (BL) | flach | 1 | SwRS-048 |
| M-036 | ChangeTracking | mittel | 3 | SyRS-009, SwRS-007, StRS-030 |
| M-037 | Chats | mittel | 2 | SwRS-049, StRS-017 |
| M-038 | CheckListArea | flach | 1 | SwRS-050 |
| M-039 | Core (BL-Kern) | mittel | 4 | SyRS-009, SyRS-010, SwRS-006, SwRS-007 |
| M-040 | CountryArea | flach | 1 | SwRS-051 |
| M-041 | CPra | flach | 1 | SwRS-052 |
| M-042 | CustomerArea | mittel | 2 | SwRS-059, StRS-023 |
| M-043 | Customizations (CustomTables) | mittel | 2 | SwRS-053, StRS-032 |
| M-044 | DataExchange | tief | 7 | SyRS-021, SwRS-057, SwRS-058, SyRS-043, StRS-009, StRS-010, StRS-021 |
| M-045 | Devices | mittel | 3 | SwRS-054, SyRS-028, StRS-022 |
| M-046 | DocuBoard | mittel | 3 | SwRS-055, SyRS-028, StRS-022 |
| M-047 | DocumentationArea | flach | 1 | SwRS-056 |
| M-048 | EDI | mittel | 4 | SyRS-027, SwRS-060, StRS-007, StRS-010 |
| M-049 | EmployeeArea | flach | 1 | SwRS-061 |
| M-050 | ExpectedEvents | flach | 1 | SwRS-062 |
| M-051 | ExternalHelpdesk | flach | 1 | SwRS-063 |
| M-052 | ExternalToolsBL | flach | 1 | SwRS-064 |
| M-053 | Finances | tief | 6 | SyRS-032, SwRS-065, SwRS-066, SyRS-050, SwRS-155, StRS-009 |
| M-054 | Gateway (BL) | flach | 1 | SwRS-067 |
| M-055 | GUI (BL-Anteil) | flach | 1 | SwRS-134 |
| M-056 | IndexSearch | mittel | 3 | SyRS-033, SwRS-068, StRS-027 |
| M-057 | Integrations | flach | 1 | SwRS-069 |
| M-058 | ItPlanner | flach | 1 | SwRS-070 |
| M-059 | Logistics | mittel | 2 | SwRS-071, StRS-008 |
| M-060 | Mail | mittel | 4 | SyRS-035, SwRS-072, SwRS-157, StRS-017 |
| M-061 | MailScanner | mittel | 2 | SyRS-036, SwRS-073 |
| M-062 | Mailings | mittel | 2 | SwRS-074, StRS-026 |
| M-063 | MassUpdate | mittel | 2 | SyRS-034, SwRS-075 |
| M-064 | Mobile | flach | 1 | SwRS-076 |
| M-065 | Modules | mittel | 2 | SwRS-077, StRS-014 |
| M-066 | MyCentron | mittel | 3 | SyRS-029, SwRS-078, StRS-018 |
| M-067 | MyDay | mittel | 4 | SyRS-029, SwRS-079, SwRS-158, StRS-018 |
| M-068 | NexusNotifications | flach | 1 | SwRS-080 |
| M-069 | NexusTicketViews | flach | 1 | SwRS-081 |
| M-070 | Notifications | flach | 1 | SwRS-082 |
| M-071 | ObjectExternalReferences | mittel | 2 | SwRS-083, StRS-021 |
| M-072 | Outlook | flach | 1 | SwRS-084 |
| M-073 | PasswordManagementArea | mittel | 2 | SwRS-085, StRS-028 |
| M-074 | PasswordManager | mittel | 2 | SwRS-086, StRS-028 |
| M-075 | Processes | flach | 1 | SwRS-087 |
| M-076 | ProductMatrix | mittel | 2 | SwRS-088, StRS-025 |
| M-077 | Production | mittel | 2 | SwRS-089, StRS-024 |
| M-078 | Projects | mittel | 2 | SwRS-090, StRS-025 |
| M-079 | Purchasing | mittel | 2 | SwRS-091, StRS-007 |
| M-080 | ReportEngine | mittel | 3 | SyRS-025, SyRS-043, StRS-015 |
| M-081 | Reporting | flach | 1 | SyRS-025 |
| M-082 | RiverDivo | flach | 1 | SwRS-101 |
| M-083 | Sales: Receipts (Belegwesen) | tief | 16 | SyRS-011, SyRS-012, SyRS-013, SyRS-014, SyRS-015, SyRS-016, SwRS-010, SwRS-013, SwRS-014, SwRS-015, SwRS-016, SwRS-017, SwRS-018, SwRS-154, StRS-002, StRS-003 |
| M-084 | Sales: CustomerAssets (Verträge) | tief | 11 | SyRS-028, SyRS-037, SyRS-038, SyRS-039, SwRS-092, SwRS-093, SwRS-094, SwRS-095, StRS-004, StRS-006, StRS-022 |
| M-085 | Sales: Customers (CRM) | flach | 1 | SwRS-102 |
| M-086 | Sales: Support (Helpdesk) | tief | 11 | SyRS-039, SyRS-040, SyRS-041, SwRS-095, SwRS-096, SwRS-097, SwRS-098, SwRS-099, SwRS-156, StRS-005, StRS-006 |
| M-087 | Sales: CashBooks | tief | 4 | SyRS-042, SwRS-100, StRS-003, StRS-009 |
| M-088 | Sales: Marketing | mittel | 2 | SwRS-103, StRS-026 |
| M-089 | Sales: Calendar | flach | 1 | SwRS-104 |
| M-090 | Sales: DocumentationWizardArea | flach | 1 | SwRS-105 |
| M-091 | Sales: HourlySurchargeRatesBL | flach | 1 | SwRS-106 |
| M-092 | Security (PdfSigning) | mittel | 2 | SwRS-107, StRS-020 |
| M-093 | SelfCare | mittel | 2 | SwRS-108, StRS-019 |
| M-094 | Services | flach | 1 | SwRS-109 |
| M-095 | SocialMedia | flach | 1 | SwRS-110 |
| M-096 | Start | flach | 1 | SwRS-111 |
| M-097 | Statistics | mittel | 2 | SwRS-135, StRS-016 |
| M-098 | Storage | mittel | 2 | SwRS-112, StRS-008 |
| M-099 | SystemArea | flach | 1 | SwRS-113 |
| M-100 | Tags | flach | 1 | SwRS-114 |
| M-101 | Tapi | mittel | 3 | SyRS-030, SwRS-115, StRS-017 |
| M-102 | TaskManager | flach | 1 | SwRS-116 |
| M-103 | Telemetry | flach | 1 | SwRS-117 |
| M-104 | TextModuleArea | flach | 1 | SwRS-118 |
| M-105 | TicketProjects | mittel | 2 | SwRS-119, StRS-025 |
| M-106 | Time | flach | 1 | SwRS-120 |
| M-107 | ToDoArea | mittel | 2 | SyRS-029, SwRS-121 |
| M-108 | Tools | flach | 1 | SwRS-122 |
| M-109 | TradePool | flach | 1 | SwRS-123 |
| M-110 | Transactions | flach | 1 | SwRS-124 |
| M-111 | TwoFactorAuthenticator | flach | 1 | SwRS-011 |
| M-112 | Urls | flach | 1 | SwRS-125 |
| M-113 | VideoPortal | flach | 1 | SwRS-126 |
| M-114 | VoucherManagement | flach | 1 | SwRS-127 |
| M-115 | Warehousing | mittel | 4 | SyRS-013, SwRS-014, SwRS-128, StRS-008 |
| M-116 | WebLinks | flach | 1 | SwRS-129 |
| M-117 | WebServices (BL) | flach | 1 | SwRS-136 |
| M-118 | WebSuite | flach | 1 | SwRS-130 |
| M-119 | WebVersion | flach | 1 | SwRS-131 |
| M-120 | Helpers (BL) | flach | 1 | SwRS-132 |
| M-121 | Exceptions (BL) | flach | 1 | SwRS-133 |
| M-122 | Centron.DAO (Persistenz) | flach | 1 | SwRS-137 |
| M-123 | Centron.Entities | flach | 1 | SwRS-138 |
| M-124 | Centron.Common | flach | 1 | SwRS-139 |
| M-125 | Centron.Interfaces | flach | 1 | SwRS-140 |
| M-126 | Centron.Gateway | mittel | 2 | SyRS-043, SwRS-141 |
| M-127 | Centron.WPF.UI (+ Extension) | mittel | 2 | SyRS-031, SwRS-142 |
| M-128 | Centron.Controls (+ Preview) | flach | 1 | SwRS-143 |
| M-129 | Centron.Core (shared) | flach | 1 | SwRS-144 |
| M-130 | CentronNexus (Blazor-Web) | mittel | 5 | SyRS-031, SyRS-045, SwRS-145, SwRS-156, StRS-019 |
| M-131 | CentronNexus.Host | flach | 1 | SwRS-145 |
| M-132 | CentronNexus.OutlookAddIn | flach | 1 | SwRS-145 |
| M-133 | Centron.Controllers (REST-API) | mittel | 3 | SyRS-031, SyRS-046, SwRS-147 |
| M-134 | Centron.WebServices.Core | flach | 1 | SwRS-146 |
| M-135 | Centron.Host (+ Console/WindowsService) | flach | 1 | SwRS-146 |
| M-136 | ConnectionManager | flach | 1 | SwRS-146 |
| M-137 | Centron.Api.EbInterface | flach | 1 | SyRS-043 |
| M-138 | Centron.Api.Gls | mittel | 3 | SyRS-044, SwRS-151, StRS-011 |
| M-139 | Centron.Api.Shipcloud | mittel | 3 | SyRS-044, SwRS-151, StRS-011 |
| M-140 | Centron.APIs.CopDataAccess | flach | 1 | SwRS-148 |
| M-141 | Centron.APIs.EgisDataAccess | flach | 1 | SwRS-148 |
| M-142 | Centron.APIs.FinAPI | flach | 1 | SwRS-149 |
| M-143 | Centron.APIs.IcecatDataAccess | flach | 1 | SwRS-148 |
| M-144 | Centron.APIs.ITscopeDataAccess | flach | 1 | SwRS-148 |
| M-145 | Centron.Api.docuFORM | flach | 1 | SwRS-150 |
| M-146 | Datenbankschema | flach | 1 | SwRS-152 |
| M-147 | Deployment/Installer | mittel | 3 | SyRS-048, SwRS-153, StRS-031 |
| M-148 | Docker/Betrieb | mittel | 4 | SyRS-047, SyRS-049, SwRS-153, StRS-031 |
| M-149 | Scripts | mittel | 2 | SyRS-048, SwRS-153 |
| M-150 | Dokumentation | nicht analysiert | 0 | – (reine Entwickler-/Betriebsdokumentation ohne eigene Systemfunktion; als KONTEXT-Belegquelle genutzt, z. B. für SyRS-043, SwRS-157) |
| M-151 | Tests | mittel | 2 | SyRS-049, StRS-031 |
**Summen:** tief: 9 Module, mittel: 58, flach: 83, nicht analysiert: 1 (gesamt 151 Module).
## Konsistenzcheck
Automatisiert über alle drei Spezifikationsdateien ausgeführt (241 Anforderungsblöcke):
| Prüfung | Ergebnis |
|---|---|
| Doppelte oder mehrfach vergebene IDs | keine (241 eindeutige IDs: 33 StRS, 50 SyRS, 158 SwRS) |
| Anforderungen ohne Beleg | keine (jeder Block enthält mind. einen klassifizierten Beleg) |
| Anforderungen ohne Übernahmewürdigkeit | keine |
| Anforderungen ohne Prüfidee | keine |
| Tracelinks auf nicht existierende IDs | keine |
| SwRS ohne SyRS-Referenz / SyRS ohne StRS-Referenz | keine (siehe Traceability.md) |
| Abgleich Hypothesen.md ↔ Inline-Markierungen | deckungsgleich: SyRS-050, SwRS-154, SwRS-155, SwRS-156, SwRS-157, SwRS-158 (6 Stück) |
| Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk | keine gefundenen; erkannte fachliche Doppelimplementierungen sind als Konsolidierungskandidaten markiert (siehe Liste unten) |
**Wesentliche Konsolidierungskandidaten (fachlich gleiche Konzepte in getrennten Implementierungen):**
1. Gerätedatenhaltungen: AccountDevices (M-045) vs. CustomerAssets/„Stammblätter" (M-084) vs. DocuBoard-Assetmanagement (M-046) → ein Asset-Konzept (SyRS-028, StRS-022).
2. Zwei Belegmodelle: Sales/Receipts (neu) vs. Sales/CustomerAssets (alt) für dieselben Belegarten (SyRS-011).
3. Zwei Rechtemodelle: interne Rechte (Sichtrus/Sichmemb) vs. WebAccountsRights (SyRS-001/SyRS-002).
4. Drei 2FA-Wege: RADIUS, E-Mail-Link, TOTP (SyRS-005, SwRS-011).
5. Zwei Passwortverwaltungen: PasswordManagementArea vs. PasswordManager (SwRS-085/SwRS-086).
6. Zwei Workflow-/Prozess-Engines: Processes vs. Services/Workflows (SwRS-087/SwRS-109); zusätzlich MailScanner-Workflows (SyRS-036).
7. Zwei Customizing-Mechanismen: Custom Properties vs. Custom Tables (SwRS-029/SwRS-053).
8. Drei Projektbegriffe: Projects, CrmProjects, TicketProjects (SwRS-090/SwRS-119, StRS-025).
9. Zwei Aufgabenkonzepte: ToDoArea vs. TaskManager (SwRS-116/SwRS-121).
10. Zwei Benachrichtigungssysteme: Notifications vs. NexusNotifications (SwRS-080/SwRS-082).
11. EDI-Logik doppelt: Centron.BL/EDI vs. Centron.Gateway/EDI_* (SyRS-027/SwRS-141).
12. Bankverbindungen doppelt: Felder in Tabelle Kunden vs. BankAccount-Objekte (SwRS-152/SwRS-019).
13. Zwei Endkunden-Formularwege: SelfCare vs. Nexus-Kundenportal-Formulare (SwRS-108/SyRS-045).
14. Versandwege GLS-direkt vs. Shipcloud (SyRS-044).
15. Desktop-Client (WPF) vs. Nexus-Web-UI für dieselben Prozesse (SyRS-031, SwRS-142/SwRS-145).
## Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen)
75 Anforderungen sind risikorelevant. Belegsituation:
| ID | Titel | PRIMÄR-Beleg vorhanden | Status |
|---|---|---|---|
| SyRS-001 | Gruppenbasierte Benutzerrechtepruefung | ja | belegt |
| SyRS-002 | Getrenntes Rechtemodell fuer Web-Accounts | ja | belegt |
| SyRS-003 | Ticketbasierte Sitzungen mit Lizenzpruefung | ja | belegt |
| SyRS-004 | Mehrere Authentifizierungsverfahren | ja | belegt |
| SyRS-005 | Zwei-Faktor-Authentifizierung | ja | belegt |
| SyRS-006 | Zeitgesteuerte Kontodeaktivierung | ja | belegt |
| SyRS-007 | Anwendungsbezogene Anmelderechte | ja | belegt |
| SyRS-008 | Standard-Rechtegruppen | ja | belegt |
| SwRS-001 | Rechteermittlung SQL+Cache | ja | belegt |
| SwRS-002 | Passwort SHA1 ungesalzen | ja | belegt |
| SwRS-003 | 2FA-Validatorwahl | ja | belegt |
| SwRS-004 | Rechtegruppenverwaltung | ja | belegt |
| SwRS-005 | Ticket-Wiederverwendung+LoginIP | ja | belegt |
| SwRS-008 | Standardrechtegruppen aus Ressource | ja | belegt |
| SwRS-009 | Signaturvalidierte Lizenzdatei | ja | belegt |
| SyRS-011 | Belegkette Weiterfuehrungswege | ja | belegt |
| SyRS-012 | Nummernkreise je Mandant/Filiale | ja | belegt |
| SyRS-013 | Bestandswirkung der Belege | ja | belegt |
| SyRS-014 | Mindestpreisschutz | ja | belegt |
| SwRS-010 | Belegnummernvergabe+Templatekunde | ja | belegt |
| SwRS-011 | TOTP-Zweitfaktor | ja | belegt |
| SwRS-012 | Nummernkreis-Kaskade | ja | belegt |
| SwRS-014 | Negativbuchung nur mit Recht | ja | belegt |
| SwRS-015 | Mindestpreis-Reauth | ja | belegt |
| SyRS-017 | API-Zugriffstokens | ja | belegt |
| SwRS-019 | Bankverbindungen Rechte+Default | ja | belegt |
| SwRS-020 | Kontenstamm Rechte+FiBu-Nummer | ja | belegt |
| SwRS-021 | API-Token Hash+Ablauf+Log | ja | belegt |
| SwRS-026 | Konfig-DB Masterkey | ja | belegt |
| SyRS-022 | DSGVO Loeschkonzept | ja | belegt |
| SwRS-027 | Kollisionssichere Nummernvergabe | ja | belegt |
| SwRS-030 | DSGVO-Kontaktloeschung | ja | belegt |
| SyRS-021 | FiBu-Uebergabe DATEV | ja | belegt |
| SwRS-057 | FiBu-Exportkonfigurationen | ja | belegt |
| SwRS-058 | Doppeluebergabeschutz FiBu | ja | belegt |
| SyRS-032 | Onlinebanking-Zahlungsabgleich | ja | belegt |
| SwRS-065 | Zahlungseingangsprotokoll | ja | belegt |
| SwRS-066 | Bankumsatz-Zuordnung/Buchung | ja | belegt |
| SwRS-085 | Kundenzugangsdaten+Logs | ja | belegt |
| SwRS-086 | Passwortmanager Siegel | ja | belegt |
| SyRS-037 | Vertragsverwaltung Laufzeit/Intervalle | ja | belegt |
| SyRS-038 | Automatische Vertragsfakturierung | ja | belegt |
| SyRS-039 | Timer-Billing | ja | belegt |
| SyRS-040 | Helpdesk Rechte+Status | ja | belegt |
| SyRS-042 | Kassenbuch | ja | belegt |
| SwRS-092 | Vertrags-Datumsarithmetik | ja | belegt |
| SwRS-093 | Auto-Vertragsschliessen | ja | belegt |
| SwRS-094 | Abrechnungsfaellige Kunden+Zaehler | ja | belegt |
| SwRS-095 | Timer-Belegerzeugung | ja | belegt |
| SwRS-096 | Ticket-Rechtepruefung Save | ja | belegt |
| SwRS-097 | Ticket-Sichtbarkeit restriktiv | ja | belegt |
| SwRS-100 | Kassenbuchbuchung | ja | belegt |
| SwRS-101 | Riverbird-Ticketvalidierung | ja | belegt |
| SwRS-106 | Stundenzuschlagssaetze | ja | belegt |
| SwRS-107 | PDF-Signatur | ja | belegt |
| SwRS-112 | Inventur | ja | belegt |
| SwRS-127 | Gutscheinverwaltung | ja | belegt |
| SyRS-043 | E-Rechnungsformate | ja | belegt |
| SyRS-046 | REST-API Rechteautorisierung | ja | belegt |
| SwRS-144 | Core-Bibliothek TOTP | ja | belegt |
| SwRS-147 | Versionierte Controller | ja | belegt |
| SwRS-149 | finAPI-Client | ja | belegt |
| SyRS-050 | [HYPOTHESE] Mahnwesen | nein | HYPOTHESE |
| SwRS-154 | [HYPOTHESE] Anzahlungsverrechnung | ja | HYPOTHESE |
| SwRS-155 | [HYPOTHESE] SEPA-Lastschrift | ja | HYPOTHESE |
| StRS-003 | Geschuetzte Fakturierung | ja | belegt |
| StRS-004 | Vertragsgeschaeft | ja | belegt |
| StRS-006 | Leistungserfassung | ja | belegt |
| StRS-009 | Finanzprozesse | ja | belegt |
| StRS-010 | E-Belegaustausch | ja | belegt |
| StRS-012 | Berechtigungssteuerung | ja | belegt |
| StRS-013 | Sichere Anmeldung/API | ja | belegt |
| StRS-014 | Lizenz-/Modulsteuerung | ja | belegt |
| StRS-028 | Kundenzugangsdaten | ja | belegt |
| StRS-030 | DSGVO+Audit | ja | belegt |
**Regelprüfung:** Alle risikorelevanten Anforderungen besitzen entweder einen PRIMÄR-Beleg mit benannter durchsetzender Stelle oder sind als `[HYPOTHESE]` gekennzeichnet (betrifft SyRS-050 Mahnwesen). Kein Verstoß gegen die risikobasierte Priorisierung.
## Selbstbewertung
**Umfang des Laufs:** 241 Anforderungen (33 StRS, 50 SyRS, 158 SwRS) über 151 Inventarmodule; 6 Hypothesen (2,5 %); 75 risikorelevante Anforderungen.
**Analysetiefe (absolute Zahlen):**
- tief: 9 Module (M-016 Licensing, M-017 Logins/Auth, M-024 Rights, M-044 DataExchange/FiBu, M-053 Finances/Onlinebanking, M-083 Receipts/Belegwesen, M-084 CustomerAssets/Verträge, M-086 Support/Helpdesk, M-087 CashBooks) - Kernlogik der risikorelevanten Pfade wurde im Quelltext gelesen.
- mittel: 58 Module (2-3 Anforderungen, Kernmethoden gelesen).
- flach: 83 Module (1 Anforderung auf Basis von Klassen-/Methodensignaturen und gezielten Codeausschnitten).
- nicht analysiert: 1 Modul (M-150 docs - reine Dokumentation, als KONTEXT-Belegquelle genutzt).
**Mindestabdeckung:** erreicht. Jedes der 151 Module hat mindestens eine Anforderung; einzige Ausnahme ist M-150 mit dokumentierter Begründung (zulässig laut Vorgabe: `nicht analysiert` mit Begründung).
**Dünne Belegstellen (ehrliche Abgrenzung):**
- Bei flach eingestuften Modulen stützen sich die PRIMÄR-Belege auf gelesene Methodensignaturen und kurze Codeausschnitte, nicht auf vollständige Methodenrümpfe (z. B. SwRS-047 Icons, SwRS-070 ItPlanner, SwRS-090 Projekte, SwRS-124 Transactions, SwRS-143 Controls). Die Aussagen sind bewusst eng an den gesicherten Befund formuliert.
- Rein strukturbasierte Belege (Ordner-/Projektexistenz statt Prüf logik) tragen SwRS-142 (WPF-Client), SwRS-143 (Controls), SwRS-145 (Nexus), SwRS-146 (Hosting), SyRS-031 (Mehrkanal), SyRS-049 (Tests) - hier ist die Existenz der Struktur selbst der Fakt.
- Hypothesen betreffen v. a. Abrechnungsdetails (Mahnwesen, SEPA-Datei, Anzahlungsverrechnung) und Web-/Sync-Verhalten (WebCart-Sortiment, Exchange-Sync, Supremo).
- SEKUNDÄR/KONTEXT-lastig sind SyRS-050 (nur Konfigurationsschalter) und SwRS-156 (nur README + Klassenexistenz) - beide korrekt als HYPOTHESE geführt.
**Hypothesenquote:** 6 von 241 (2,5 %). Der Wert liegt bewusst über null: Bei einer Codebasis dieser Größe (u. a. 11.441 Zeilen allein in ReceiptBL.cs, 1558 DB-Tabellen) bleiben nach einem Lauf zwangsläufig offene Kernfragen; die sechs Hypothesen benennen sie explizit.
**Erkenntnisse für eine Folge-Iteration (Nachschlag empfohlen):**
1. Mahnwesen lokalisieren und als belegte Anforderungen ausarbeiten (SyRS-050) - abrechnungskritisch.
2. DownPaymentBL, SEPA-Erzeugung und ReceiptItemPriceBL/ReceiptPriceHelperBL (Preisberechnung inkl. Rabatt-/Staffellogik) vertiefen - die Preisermittlungsformeln selbst wurden nicht spezifiziert.
3. Das alte Belegmodell Sales/CustomerAssets systematisch gegen Sales/Receipts differenzieren (welche Masken nutzen noch das Altmodell?).
4. WebServices-BL (464 Dateien) und Centron.Controllers-Endpunkte vollständig katalogisieren (API-Oberfläche als eigenes Spezifikationskapitel).
5. DB-Schema systematisch auswerten (Constraints/Trigger je Kerntabelle); in diesem Lauf nur punktuell genutzt (Tabelle Kunden).
6. WPF-Masken (Views/Wizards) und Nexus-Seiten fachlich durchgehen, um UI-nahe Regeln (Pflichtfelder, Sichtbarkeiten) zu heben - bisher überwiegend BL-getrieben analysiert.
7. Statistiken/Reports einzeln inventarisieren (Reportvorlagenbestand ist Migrationsaufwandstreiber).
**Methodische Anmerkungen:**
- Alle Anforderungen wurden aus statischer Analyse gewonnen; keine Ausführung, keine externen Werkzeuge.
- Die Change-Historie (Git) wurde nicht ausgewertet, da im Arbeitsverzeichnis keine Commit-Metadaten als Dateien vorlagen (nur der Code-Snapshot); Schritt 2 der Methodenkette ist insoweit teilweise erfüllt (Projektartefakte docs/, README, CentronRights.md wurden genutzt).
@@ -0,0 +1,47 @@
# Glossar – c-entron ERP-Suite
Domänenbegriffe, wie sie in den Anforderungen verwendet werden. Technische Bezeichner (Klassen,
Tabellen) in Originalschreibweise.
| Begriff | Bedeutung |
|---|---|
| Abholliste / Abholschein (PickupList) | Beleg über die Rücknahme von Ware vom Kunden; bucht Bestand zu. |
| AppUser | Internes Benutzerkonto (Tabelle `Sichbenu`); mit Mitarbeiter (Employee) verknüpft. |
| Asset (CustomerAsset) | Historischer Oberbegriff des alten Belegmodells („Vorgang") unter Sales/CustomerAssets; zugleich Begriff für beim Kunden befindliche Geräte („Stammblätter"). |
| AssetCondition | Stammdatensatz für Zahlungs-/Lieferkonditionen; steuert u. a. Kassenbuchwirkung (`ChangesCashBook`) und automatisches Schließen von Belegen. |
| AutomaticFactura | Automatische Vertragsfakturierung inkl. Zählerstands- und Sammelrechnungslogik. |
| Barbeleg / IsCashAsset | Beleg mit Barzahlung; eigener Nummernkreis (CashInvoice/CashOffer) und Kassenbuchbindung. |
| Belegkette | Zulässige Weiterführungspfade zwischen Belegarten (Angebot → Auftrag → Lieferschein → Rechnung → Gutschrift; Vertrag → Rechnung). |
| BranchOrigin | Regel, aus welcher Person (Ersteller oder Vertriebsmitarbeiter) die Filiale eines neuen Belegs abgeleitet wird. |
| c-entron Nexus | Blazor-basierter Webclient (interne Web-Oberfläche und Kundenportal). |
| CashBookRecord | Kassen-Belegart je Steuersatz/Filiale mit Sachkonto und Steuerschlüssel; Voraussetzung jeder Kassenbuchbuchung. |
| CentronObjectKindNumeric | Systemweiter numerischer Katalog der Objektarten (Belegarten, Tickets, Konten …). |
| Concurrency-Control-Guid | Token je Beleg zur Erkennung konkurrierender Änderungen bei Einzelfeld-Updates. |
| Dispatcher | Ausgezeichneter Mitarbeiter für die Einsatz-/Ticketverteilung (genau einer). |
| Distributor | Großhändler/Lieferant der IT-Branche (ALSO, Alltron, EGIS, Komsa, Herweck, ITscope …). |
| EDI | Elektronischer Datenaustausch mit Distributoren (Bestellungen, Auftragsbestätigungen) in herstellerspezifischen Formaten. |
| Eskalation | Dreistufige Fristenüberwachung überfälliger Vorgänge mit Zeitstempeln `Eskalation1Am`–`Eskalation3Am`. |
| Firmengruppe (CompanyGroup) | Konzernverbund von Kundenkonten; kann Belegeinstellungen der Gruppe vererben (`UseSettingsFromCompanyGroupForReceipts`). |
| Helpdesk / Ticket | Supportvorgang mit Status, Verantwortlichem, Fälligkeit, Timern und Eskalation. |
| Helpdesk-Timer | Am Ticket erfasste Arbeitszeit; Grundlage der Leistungsabrechnung (Timer-Billing). |
| I3D | Systemweiter Primärschlüssel der Geschäftsobjekte (zentral vergeben, keine Identity-Spalten). |
| Lieferschein (DeliveryList) | Bestandswirksamer Auslieferungsbeleg; bucht Bestand ab. |
| Mandant (Mandator) | Rechtlich eigenständige Firma innerhalb einer Installation; Filialen (Branch) sind Mandanten zugeordnet. |
| Mindestpreis (MinPrice) | Artikeluntergrenze; Unterschreitung nur per Recht bzw. Zweitanmeldung (Vier-Augen-Prinzip). |
| MSP / MSP-Collector | Managed-Service-Provider-Funktionen; Collector sammelt Verbrauchs-/Gerätedaten für Auswertung und Abrechnung. |
| Nummernkreis (NumberGroup) | Fortlaufender Nummernvorrat je Belegart, Mandant und Filiale mit Fallback-Kaskade. |
| Receipt | Beleg im neueren Belegmodell (Sales/Receipts); ersetzt schrittweise das CustomerAssets-Modell. |
| Rechtegruppe (AppGroup) | Bündel von Rechten (Tabelle `Sichtrus`), Benutzern über `Sichmemb` zugeordnet. |
| Restriktives Recht | Recht, das die Sicht einschränkt statt erweitert (z. B. „Tickets anzeigen – nur eigene"). |
| RMA | Reklamationsvorgang: Rücknahme vom Kunden (SendBack) und Weiterleitung an den Lieferanten (SendForth). |
| Sammelrechnung (Collective Invoice) | Eine Rechnung über mehrere Verträge/Leistungen eines Kunden oder Konzerns. |
| SelfCare | Web-Formulare, über die Endkunden Anfragen einreichen. |
| Sonderpreis | Kundenindividueller Artikelpreis; laut Doku Basis des WebCart-Sortiments. |
| Stammblatt | Historische Bezeichnung für Gerätedatensätze beim Kunden (v. a. Drucker); Konsolidierungskandidat zum Asset-Konzept. |
| Ticket (Anmeldung) | Sitzungsnachweis nach erfolgreicher Authentifizierung (nicht zu verwechseln mit Helpdesk-Ticket). |
| Timer-Billing | Überführung erfasster Ticketzeiten in Abrechnungsbelege unter Vertrags-/Kontingentbeachtung. |
| Vertrag (ReceiptContract) | Wiederkehrend abzurechnender Beleg mit Laufzeit, Kündigung, Verlängerung und Abrechnungsintervall. |
| Web-Account | Externer Kundenzugang (Portal/Shop) mit eigenem Rechtemodell (`WebAccountsRights`). |
| WebCart | Shop-Bereich des Kundenportals im Nexus. |
| Zählerstand (Counter) | Nutzungswert je Gerät/Vertrag (z. B. Druckseiten) als Abrechnungsgrundlage. |
| ZUGFeRD / Factur-X | Hybrides E-Rechnungsformat (PDF mit eingebettetem XML), hier in Version 2.1 Extended. |
@@ -0,0 +1,23 @@
# Hypothesen – c-entron ERP-Suite
Diese Datei enthält **genau die Anforderungen mit `[HYPOTHESE]`-Markierung** aus StRS/SyRS/SwRS
(deckungsgleich mit den Inline-Markierungen, keine zusätzlichen freien Fragen). Offene Punkte ohne
zugehörige Anforderung stehen in der Selbstbewertung des Analyseberichts.
Stand: 6 Hypothesen bei 241 Anforderungen (2,5 %).
| ID | Titel | Offene Frage (fehlende Information zur Bestätigung) |
|---|---|---|
| SyRS-050 | Mahnwesen mit drei Mahnstufen und Belegsperre | Wo liegt die durchsetzende Mahnlauf-Logik (Stufenermittlung, Mahnschreiben, Sperrprüfung)? Nur Konfigurationsschalter (DunningLevel1-3Text, CustomerAssetsLockedAfterDunningLevel) wurden gefunden. |
| SwRS-154 | Verrechnung von Anzahlungen in der Schlussrechnung | Wie verrechnet DownPaymentBL geleistete Anzahlungen konkret in der Schlussrechnung (Positionslogik, Steuerbehandlung)? |
| SwRS-155 | SEPA-Lastschrifteinzug aus Rechnungen | Wo wird die SEPA-XML-Einzugsdatei erzeugt (vermutlich Gateway/OnlineBanking)? Mandatsbindung und Statusfeld `directDebitCreated` sind belegt, die Dateierzeugung nicht. |
| SwRS-156 | Webshop-Sortiment aus Kunden-Sonderpreisen | Welche Codestelle im Nexus-WebCart schränkt das Sortiment auf die Sonderpreise des Kunden ein? Bisher nur README-Aussage und Existenz von CustomerSpecialArticleBL. |
| SwRS-157 | Bidirektionale Exchange-Terminsynchronisation | Synchronisationsrichtung, Konfliktauflösung und Auslöser der Kalendersynchronisation (EWS vs. Graph) sind nicht aus dem Code verifiziert. |
| SwRS-158 | Fernwartungsstart (Supremo) aus dem Arbeitsplatz | Wie wird die Supremo-Sitzung aufgebaut (Parameter, Zielgerätezuordnung)? Nur Komponenten (MyDay/Supremo.cs, assemblies/remote-desktop) belegt. |
## Hinweis zur risikobasierten Priorisierung
SyRS-050, SwRS-154 und SwRS-155 betreffen Abrechnung/Fakturierung. SwRS-154/155 besitzen je einen
`PRIMÄR`-Beleg für den belegten Teilaspekt; die dennoch offene Kernregel ist der Grund für die
Hypothesen-Kennzeichnung. SyRS-050 besitzt keinen `PRIMÄR`-Beleg und ist deshalb zwingend als
`[HYPOTHESE]` geführt (regelkonform).
@@ -0,0 +1,669 @@
# StRS – Stakeholder Requirements Specification
**System:** c-entron ERP-Suite | **Quelle:** Statische Codeanalyse | **Lauf:** 2026-08-27
Fachliche Anforderungen aus Stakeholdersicht (Akteure, Geschäftsziele). Grundlage: aus der Codebasis rekonstruierte Fachfunktionen.
---
**Zielgruppe des Systems (aus der Codebasis rekonstruiert):** IT-Systemhäuser und Managed-Service-Provider im DACH-Raum (deutschsprachige Fachbegriffe, DATEV-/SEPA-/ZUGFeRD-Bezüge, Distributoren-EDI ALSO/Alltron/EGIS/Komsa/Herweck, Schweiz-Spezifika in Receipts/Switzerland).
```
ID: StRS-001
Titel: Zentrale Geschäftspartnerverwaltung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Vertrieb, Einkauf, Verwaltung
Vorbedingung: -
Fakt: Die Codebasis führt Konten mit Rollen Kunde/Lieferant, Adressen, Ansprechpartnern, Klassifikationen, Firmengruppen, Bankverbindungen und Länder-/Währungsbezug (Accounts, Sales/Customers, CountryArea, Accounting).
Aussage: Das Unternehmen soll alle Geschäftspartner (Kunden, Lieferanten, Interessenten) einheitlich mit Adressen, Ansprechpartnern, Konditionen und Bankdaten verwalten können.
Ergebnis: Ein Partnerstamm als Basis aller Prozesse.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Accounts/AccountBL.cs (SaveAccount, Kontotypen) - Begründung: implementiert die Partnerverwaltung.
Prüfidee: Partner als Kunde und Lieferant führen; alle Belegprozesse referenzieren denselben Stamm.
Tracelinks: SyRS-020, SyRS-024
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Fundament.
Status: belegt
```
```
ID: StRS-002
Titel: Durchgängige Angebots- und Auftragsabwicklung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Vertrieb
Vorbedingung: Kunde existiert.
Fakt: Belegkette Angebot → Auftrag → Lieferschein → Rechnung (→ Gutschrift) mit Weiterführung, Versionierung, Sperren und Vorlagen ist implementiert (Sales/Receipts).
Aussage: Der Vertrieb soll Verkaufsvorgänge vom Angebot bis zur Rechnung ohne Doppelerfassung abwickeln können; jeder Schritt bleibt nachvollziehbar.
Ergebnis: Lückenlose, versionierte Belegkette.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs (ForwardReceipt, CreateNewVersion) - Begründung: implementiert die Kette.
Prüfidee: Kompletten Durchlauf Angebot→Rechnung ohne Neuerfassung der Positionen durchführen.
Tracelinks: SyRS-011, SyRS-015, SyRS-016
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Kernprozess.
Status: belegt
```
```
ID: StRS-003
Titel: Korrekte und geschützte Fakturierung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Vertrieb, Buchhaltung, Geschäftsführung
Vorbedingung: Leistungen/Lieferungen sind erbracht.
Fakt: Rechnungen, Barrechnungen, interne Rechnungen und Gutschriften haben eigene Nummernkreise; Mindestpreise sind geschützt (Vier-Augen-Prinzip); Kassenbuchbuchungen entstehen automatisch (Receipts/Invoices, CashBooks, NumberGroups).
Aussage: Das Unternehmen soll Rechnungen und Gutschriften mit eindeutigen Nummern, geschützten Preisuntergrenzen und automatischer Kassenanbindung erstellen können.
Ergebnis: Revisionssichere Fakturierung ohne Margenverlust.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/InvoiceSpecificLogic.cs (Nummernkreise), ReceiptBL.CheckArticleMinPrices - Begründung: implementieren die Schutzregeln.
Prüfidee: Rechnung unter Mindestpreis ohne Freigabe; erwartet: verhindert.
Tracelinks: SyRS-012, SyRS-014, SyRS-042, SyRS-050
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Umsatz- und Compliance-Kern.
Status: belegt
```
```
ID: StRS-004
Titel: Vertragsgeschäft mit wiederkehrender Abrechnung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Geschäftsführung, Vertragsverwaltung, Buchhaltung
Vorbedingung: Serviceverträge sind abgeschlossen.
Fakt: Verträge mit Laufzeiten, Verlängerung, Intervallen, Zählerständen und automatischer Fakturierung inkl. Sammelrechnung sind implementiert (CustomerAssets/Contracts, AutomaticFactura).
Aussage: Das Unternehmen soll wiederkehrende Umsätze (Wartung, Miete, Managed Services, Seitenpreise) automatisch, vollständig und periodengerecht abrechnen können.
Ergebnis: Planbare, automatisierte Vertragsumsätze.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ContractBL.cs, AutomaticFactura/AutomaticFacturaBL.cs - Begründung: implementieren das Vertragsgeschäft.
Prüfidee: Jahresvertrag mit Zähler; erwartet: 12 korrekte Perioden, keine Lücke/Doppel.
Tracelinks: SyRS-037, SyRS-038, SyRS-039
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - strategischer Umsatzträger.
Status: belegt
```
```
ID: StRS-005
Titel: Professioneller Kundensupport (Helpdesk)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Support, Support-Leitung, Endkunde
Vorbedingung: Kunde meldet Anliegen.
Fakt: Ticketsystem mit Status, Kategorien, Prioritäten, Zeiterfassung, Eskalation, Abschlussbenachrichtigung, Ticket-Projekten und Web-Zugriff ist implementiert (Sales/Support, NexusTicketViews).
Aussage: Der Support soll Kundenanliegen als Tickets mit Verantwortlichen, Fälligkeiten und Eskalationen bearbeiten; Kunden sollen ihre Tickets online verfolgen können.
Ergebnis: Nachvollziehbarer, SLA-fähiger Supportprozess.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs, Escalation/EscalationBL.cs - Begründung: implementieren den Prozess.
Prüfidee: Ticket mit SLA-Verletzung; erwartet: dreistufige Eskalation.
Tracelinks: SyRS-040, SyRS-041, SyRS-036
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Kernprozess des Systemhauses.
Status: belegt
```
```
ID: StRS-006
Titel: Lückenlose Leistungserfassung und -verrechnung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Techniker, Buchhaltung
Vorbedingung: Leistungen werden erbracht.
Fakt: Ticket-Timer mit Abrechnungsstatus, Stundenzuschlagssätzen und Belegerzeugung sind implementiert (HelpdeskTimer*, TimerBilling, HourlySurchargeRates).
Aussage: Erbrachte Arbeitszeiten sollen vollständig erfasst und - unter Berücksichtigung von Verträgen und Zuschlägen - genau einmal verrechnet werden.
Ergebnis: Kein Leistungsverlust zwischen Erbringung und Rechnung.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/TimerBilling/TimerBillingBL.cs - Begründung: implementiert die Verrechnung.
Prüfidee: Erfasste Zeit doppelt abrechnen; erwartet: verhindert.
Tracelinks: SyRS-039
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - direkter Umsatzhebel.
Status: belegt
```
```
ID: StRS-007
Titel: Effizienter Einkauf mit Distributorenanbindung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Einkauf
Vorbedingung: Bedarf besteht.
Fakt: Bestellvorschläge, Lieferantenbestellungen, EDI-Übertragung an Distributoren und externe Artikel-/Preissuche (ITscope, EGIS, COP, Icecat) sind implementiert.
Aussage: Der Einkauf soll Bedarfe automatisch erkennen, Preise/Verfügbarkeiten der Distributoren direkt einsehen und Bestellungen elektronisch übertragen können.
Ergebnis: Schneller, fehlerarmer Einkaufsprozess.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Purchasing/OrderSuggestionList/OrderSuggestionListBL.cs, EDI/EDIDispatcherBL.cs - Begründung: implementieren den Prozess.
Prüfidee: Unterschreitung Mindestbestand bis EDI-Bestellung durchspielen.
Tracelinks: SyRS-027; SwRS-091, SwRS-148
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Kernprozess des IT-Handels.
Status: belegt
```
```
ID: StRS-008
Titel: Verlässliche Artikel- und Lagerführung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Lager, Einkauf, Vertrieb
Vorbedingung: Artikelstamm existiert.
Fakt: Artikelstamm mit EAN, Preisen, Seriennummern-/Barcodeverfolgung, Mehrlager, Umbuchungslog, Inventur und belegbasierter Bestandsführung ist implementiert (Warehousing, Logistics, Storage).
Aussage: Bestände sollen jederzeit korrekt, seriennummerngenau und je Lagerort nachvollziehbar sein; jede Veränderung hat einen Belegbezug.
Ergebnis: Inventurfähige Bestandsführung.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Logistics/Warehousing/StockBL.cs, Warehousing/ArticleBL.cs - Begründung: implementieren die Bestandsführung.
Prüfidee: Bestandsdifferenz erzeugen; erwartet: über Belege/Umbuchungslog aufklärbar.
Tracelinks: SyRS-013, SyRS-034; SwRS-112
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Kernprozess.
Status: belegt
```
```
ID: StRS-009
Titel: Nahtlose Finanzprozesse (Zahlungen, FiBu, Mahnwesen)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Buchhaltung, Steuerberater
Vorbedingung: Belege sind fakturiert.
Fakt: Onlinebanking-Zahlungsabgleich, Zahlungsprotokolle, DATEV-Export mit Doppelübergabeschutz und Kassenbuch sind implementiert; Mahnwesen ist konfigurierbar angelegt.
Aussage: Zahlungseingänge sollen automatisch zugeordnet, offene Posten gemahnt und alle Buchungsdaten ohne Doppelerfassung an die Finanzbuchhaltung (DATEV) übergeben werden.
Ergebnis: Geschlossener Order-to-Cash-Kreislauf.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Finances/OnlineBanking/OnlineBankingAccountTransactionsBL.cs, DataExchange/BookKeeping/BookKeepingExportBL.cs - Begründung: implementieren die Finanzprozesse.
Prüfidee: Zahlungseingang bis DATEV-Export durchspielen; keine manuelle Doppelerfassung nötig.
Tracelinks: SyRS-021, SyRS-032, SyRS-042, SyRS-050
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Pflichtprozess.
Status: belegt
```
```
ID: StRS-010
Titel: Elektronischer Belegaustausch und E-Rechnung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Buchhaltung, Kunden, Behörden, Distributoren
Vorbedingung: Belege werden ausgetauscht.
Fakt: ZUGFeRD/Factur-X, XRechnung-Schnittstellen, ebInterface (AT) und Distributoren-EDI sind implementiert.
Aussage: Das Unternehmen soll Belege elektronisch in den gesetzlich bzw. vom Partner geforderten Formaten senden und empfangen können.
Ergebnis: E-Rechnungs- und EDI-Konformität.
Belege:
- [PRIMÄR] src/backend/Centron.BL/ReportEngine/CustomPdfGenerators/CustomZugferdPdfGenerator.cs; Centron.Gateway/ZUGFeRD21_Extended - Begründung: implementieren die Formate.
Prüfidee: ZUGFeRD-Rechnung gegen Validator prüfen.
Tracelinks: SyRS-043, SyRS-027
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - gesetzlich getrieben.
Status: belegt
```
```
ID: StRS-011
Titel: Integrierte Versandabwicklung
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Lager/Versand
Vorbedingung: Lieferung ist kommissioniert.
Fakt: GLS- und Shipcloud-Anbindungen erzeugen Sendungen aus dem System (src/apis).
Aussage: Versandlabel und Tracking sollen direkt aus dem Lieferbeleg erzeugt werden.
Ergebnis: Kein Medienbruch im Versand.
Belege:
- [PRIMÄR] src/apis/Centron.Api.Gls/CentronGlsLogic.cs - Begründung: implementiert den Versand.
Prüfidee: Label aus Lieferschein erzeugen.
Tracelinks: SyRS-044
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Logistikstandard.
Status: belegt
```
```
ID: StRS-012
Titel: Feingranulare Berechtigungssteuerung
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Geschäftsführung, Administrator, alle Benutzer
Vorbedingung: -
Fakt: Gruppenbasiertes Rechtesystem mit hunderten Einzelrechten, restriktiven Rechten (nur eigene/Filiale), Rollenvorlagen und Rechteprotokoll ist implementiert.
Aussage: Jede Funktion und jede Datensicht soll einzeln berechtigt werden können; Standardrollen erleichtern die Einführung; Rechteänderungen sind nachvollziehbar.
Ergebnis: Need-to-know-Prinzip im gesamten System.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs - Begründung: implementiert das Rechtesystem.
Prüfidee: Stichprobe: Funktion ohne Recht aufrufen; erwartet: verweigert.
Tracelinks: SyRS-001, SyRS-002, SyRS-006, SyRS-007, SyRS-008
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Sicherheitsfundament.
Status: belegt
```
```
ID: StRS-013
Titel: Sichere Anmeldung und API-Zugänge
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Alle Benutzer, externe Systeme
Vorbedingung: -
Fakt: Mehrere Authentifizierungsverfahren, Zwei-Faktor-Optionen, Sitzungstickets, gehashte API-Tokens und deklarativ geschützte REST-Endpunkte sind implementiert.
Aussage: Zugriffe von Menschen und Systemen sollen stark authentifiziert, zeitlich begrenzt und protokolliert sein.
Ergebnis: Kontrollierter Zugang über alle Kanäle.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/Auth/Authenticator.cs, AccessTokens/AccessTokenBL.cs - Begründung: implementieren die Zugriffssicherung.
Prüfidee: Penetrationstest der Anmeldewege.
Tracelinks: SyRS-003, SyRS-004, SyRS-005, SyRS-017, SyRS-046
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - im Zielsystem modernisieren (Passworthashing!).
Status: belegt
```
```
ID: StRS-014
Titel: Lizenz- und Modulsteuerung des Produkts
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Hersteller, Kunde (Systemhaus)
Vorbedingung: -
Fakt: Signierte Lizenzdateien, Seat-Prüfung bei Anmeldung, Feature-Gates (ModuleFeatures) und Modulkatalog sind implementiert.
Aussage: Der Funktionsumfang je Installation soll sich aus der erworbenen Lizenz ergeben; Überbelegung von Arbeitsplätzen wird verhindert.
Ergebnis: Durchgesetztes Lizenzmodell.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Licensing/LicenseManager.cs - Begründung: implementiert die Lizenzsteuerung.
Prüfidee: Anmeldung über Seat-Limit; erwartet: abgelehnt.
Tracelinks: SyRS-003; SwRS-009, SwRS-139
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - als SaaS-Abomodell neu umsetzen.
Status: belegt
```
```
ID: StRS-015
Titel: Professioneller Belegdruck und Berichte
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Fachbereiche, Kunden (Empfänger)
Vorbedingung: Daten vorhanden.
Fakt: FastReport-basierte Report-Engine mit Vorlagen, PDF-Export, Belegarchivierung und zentraler Reportverteilung ist implementiert.
Aussage: Alle Belege und Berichte sollen in anpassbarem Firmenlayout gedruckt, als PDF archiviert und zentral aktualisiert werden können.
Ergebnis: Einheitliches Schriftbild, archivierte Belege.
Belege:
- [PRIMÄR] src/backend/Centron.BL/ReportEngine/FastReportHelper.cs; ReceiptBL.CreateFullReportForReceipt - Begründung: implementieren den Druck.
Prüfidee: Vorlage ändern; alle Folgedrucke nutzen neue Vorlage.
Tracelinks: SyRS-025
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Pflicht.
Status: belegt
```
```
ID: StRS-016
Titel: Betriebswirtschaftliche Transparenz
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Geschäftsführung, Controlling
Vorbedingung: Bewegungsdaten vorhanden.
Fakt: Statistiken zu Umsatz, offenen Posten, Verträgen, Auslastung und MSP-Verbräuchen sind implementiert (Statistics).
Aussage: Die Geschäftsführung soll Umsätze, offene Posten, Vertragsbestand und Auslastung ohne Zusatzwerkzeuge auswerten können.
Ergebnis: Steuerungsfähige Kennzahlen.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Statistics/Accounts/RevenueStatisticBL.cs - Begründung: implementiert Auswertungen.
Prüfidee: Umsatzstatistik gegen Belegsumme abstimmen.
Tracelinks: SyRS-021; SwRS-135
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Führungsinstrument.
Status: belegt
```
```
ID: StRS-017
Titel: Integrierte Kommunikation (E-Mail, Telefon, Chat)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Mitarbeiter
Vorbedingung: Kommunikationskanäle konfiguriert.
Fakt: Exchange-Mail, Signaturen, Mail-Scanner, TAPI-Telefonie mit Anruferkennung und interner Chat sind implementiert.
Aussage: Kundenkommunikation soll im Vorgangskontext stattfinden: Mails und Anrufe werden automatisch Kunden/Tickets zugeordnet.
Ergebnis: Vollständige Kommunikationshistorie je Vorgang.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Mail/*, Tapi/PhoneCallBL.cs - Begründung: implementieren die Kanäle.
Prüfidee: Eingehende Mail/Anruf; erwartet: Kontextzuordnung.
Tracelinks: SyRS-035, SyRS-036, SyRS-030
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Effizienzkern.
Status: belegt
```
```
ID: StRS-018
Titel: Persönliche Arbeitsorganisation
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Mitarbeiter
Vorbedingung: -
Fakt: Kalender, ToDos, MyDay, Dashboards, Benachrichtigungen und Terminanfragen sind implementiert.
Aussage: Jeder Mitarbeiter soll seinen Arbeitsvorrat (Termine, Aufgaben, Benachrichtigungen) an einem Ort sehen und steuern können.
Ergebnis: Weniger Übersehen von Fälligkeiten.
Belege:
- [PRIMÄR] src/backend/Centron.BL/MyDay/MyDayBL.cs - Begründung: implementiert die Tagesübersicht.
Prüfidee: Fällige Objekte erscheinen in MyDay.
Tracelinks: SyRS-029
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Produktivität.
Status: belegt
```
```
ID: StRS-019
Titel: Online-Self-Service für Endkunden
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Endkunde des Systemhauses
Vorbedingung: Web-Account existiert.
Fakt: Kundenportal mit Shop (Sonderpreise), Ticketeinsicht, Verträgen, Formularen, Dokumenten und Aktionslinks ist implementiert (Nexus WebCart, SelfCare, WebLinks).
Aussage: Endkunden sollen Bestellungen, Tickets, Verträge und Dokumente online einsehen und auslösen können - beschränkt auf die eigenen Daten.
Ergebnis: Entlastung des Supports, moderner Kundenzugang.
Belege:
- [PRIMÄR] src/nexus/CentronNexus/WebCart/*.razor - Begründung: implementiert das Portal.
Prüfidee: Web-Account sieht nur eigene Tickets/Verträge.
Tracelinks: SyRS-045, SyRS-002
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Zielbild SaaS.
Status: belegt
```
```
ID: StRS-020
Titel: Dokumentenverwaltung mit digitaler Unterschrift
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Fachbereiche, Kunden
Vorbedingung: -
Fakt: Objektbezogene Verzeichnisse, PDF-Signatur, Online-Bestätigung von AVV/SEPA und Beleg-Signierprozess sind implementiert.
Aussage: Dokumente sollen objektbezogen abgelegt und Verträge/Belege digital unterschrieben werden können.
Ergebnis: Papierlose, nachweisbare Dokumentprozesse.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/FileManagement/DirectoryReferenceBL.cs, Security/PdfSigningBL.cs - Begründung: implementieren Ablage und Signatur.
Prüfidee: AVV online bestätigen; erwartet: signiertes Dokument am Kunden.
Tracelinks: SyRS-026, SyRS-022; SwRS-031, SwRS-107
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Digitalisierungskern.
Status: belegt
```
```
ID: StRS-021
Titel: Offenheit für Drittsysteme (Konnektoren)
Ebene: StRS
Typ: Schnittstelle
Qualitätsmerkmal:
Akteur: Systemhaus, Drittsysteme
Vorbedingung: Drittsystem im Einsatz.
Fakt: Konnektoren zu DocBee, docuFORM, Riverbird, CPra, Shopsystemen, TradePool sowie generische WebHooks und externe Objektreferenzen sind implementiert.
Aussage: Das System soll gängige Branchenwerkzeuge anbinden und Objekte beidseitig referenzieren können.
Ergebnis: Integrierbare Systemlandschaft.
Belege:
- [PRIMÄR] src/backend/Centron.BL/ObjectExternalReferences/ObjectExternalReferenceBL.cs, DataExchange/Connectors/* - Begründung: implementieren die Offenheit.
Prüfidee: Fremd-ID an Objekt koppeln und rückwärts auflösen.
Tracelinks: SyRS-027; SwRS-083
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Ökosystem entscheidend.
Status: belegt
```
```
ID: StRS-022
Titel: Überblick über Kundengeräte und -infrastruktur
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Service, Vertrieb
Vorbedingung: Geräte beim Kunden im Einsatz.
Fakt: Kundengeräte werden in mehreren Modulen geführt (AccountDevices, CustomerAssets/Stammblätter, DocuBoard-Assets) inkl. Logs, Vertragsbezug und Outlook-Suche.
Aussage: Der Servicebetrieb soll jederzeit wissen, welche Geräte mit welchen Verträgen beim Kunden stehen.
Ergebnis: Asset-Transparenz für Service und Abrechnung.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Devices/AccountDeviceBL.cs - Begründung: implementiert Geräteverwaltung.
Prüfidee: Gerät über alle Sichten konsistent auffinden.
Tracelinks: SyRS-028
Konsolidierung: Kandidat: drei Gerätedatenhaltungen (siehe SyRS-028) - im Zielsystem ein Asset-Konzept
Übernahmewürdigkeit: übernehmen - mit Konsolidierungsauflage.
Status: belegt
```
```
ID: StRS-023
Titel: Geordnete Reklamationsabwicklung (RMA)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Service, Kunde, Lieferant
Vorbedingung: Defektes Gerät wird gemeldet.
Fakt: RMA-Prozess mit Kundenrücknahme, Lieferantenweiterleitung, Versandarten und Artikelhistorie ist implementiert.
Aussage: Reklamationen sollen vom Kundeneingang bis zur Lieferantenabwicklung verfolgt werden.
Ergebnis: Kein Reklamationsverlust; Garantienachweis.
Belege:
- [PRIMÄR] src/backend/Centron.BL/CustomerArea/RmaBL.cs - Begründung: implementiert den Prozess.
Prüfidee: RMA-Kette Kunde→Lieferant→Rückläufer verfolgen.
Tracelinks: SyRS-028; SwRS-059
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Handelskern.
Status: belegt
```
```
ID: StRS-024
Titel: Auftragsbezogene Fertigung (Assemblierung)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Produktion/Technik
Vorbedingung: Fertigungsauftrag liegt vor.
Fakt: Fertigungsaufträge mit Positionen und Protokoll sowie ein Web-Produktionsmanagement sind implementiert (Production, Nexus/ProductionOrderManagement); Rechte für Stücklisten/Arbeitspläne existieren.
Aussage: Das Unternehmen soll kundenbezogene Fertigung (z. B. PC-/Server-Assemblierung) mit dokumentierten Arbeitsschritten abwickeln können.
Ergebnis: Nachvollziehbare Fertigung mit Seriennummernbezug.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Production/ProductionOrderBL.cs - Begründung: implementiert die Fertigung.
Prüfidee: Fertigungsauftrag mit Protokollschritten abschließen.
Tracelinks: SyRS-013; SwRS-089
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - sofern Geschäftsfeld bestätigt.
Status: belegt
```
```
ID: StRS-025
Titel: Projekt- und Chancenverfolgung (CRM)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Vertrieb, Projektleitung
Vorbedingung: -
Fakt: Projekte, CRM-Projekte, Ticket-Projekte, Produktmatrix, Angebotsklassifikationen (Wahrscheinlichkeit/Produktgruppe) und Aktivitäten sind implementiert.
Aussage: Der Vertrieb soll Verkaufschancen und Projekte mit Wahrscheinlichkeiten und Produktpotenzialen je Kunde verfolgen können.
Ergebnis: Gefüllte, bewertbare Pipeline.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/Offers/ClassificationProbabilityBL.cs, ProductMatrix/ProductMatrixBL.cs - Begründung: implementieren die Bewertung.
Prüfidee: Angebot mit Wahrscheinlichkeit klassifizieren; erscheint in Pipeline-Auswertung.
Tracelinks: SyRS-020; SwRS-088, SwRS-090, SwRS-119
Konsolidierung: Kandidat: drei Projektbegriffe (Projects, CrmProjects, TicketProjects) zusammenführen
Übernahmewürdigkeit: übernehmen - Vertriebssteuerung.
Status: belegt
```
```
ID: StRS-026
Titel: Zielgerichtetes Marketing (Kampagnen, Mailings, Telemarketing)
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Marketing, Vertrieb
Vorbedingung: Zielgruppen definierbar.
Fakt: Kampagnen (Accounts/Campaigns), Serien-Mailings und Telemarketing-Aktionen sind implementiert.
Aussage: Das Unternehmen soll Zielgruppen ansprechen können (Mailing, Telefonaktion, Kampagne) und Reaktionen am Kunden dokumentieren.
Ergebnis: Messbare Marketingaktionen.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Mailings/MailingDataBL.cs, Sales/Marketing/TelemarketingBL.cs - Begründung: implementieren die Aktionen.
Prüfidee: Mailing an Zielgruppe mit Antwortdokumentation.
Tracelinks: SyRS-035; SwRS-074, SwRS-103
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Basisumfang genügt ggf.
Status: belegt
```
```
ID: StRS-027
Titel: Schnelles Auffinden aller Informationen
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Alle Benutzer
Vorbedingung: -
Fakt: Volltextsuche (Lucene) über Konten und Tickets sowie Suche über Zusatzfelder sind implementiert.
Aussage: Benutzer sollen Kunden und Vorgänge über eine zentrale Suche in Sekunden finden.
Ergebnis: Kurze Suchwege im Tagesgeschäft.
Belege:
- [PRIMÄR] src/backend/Centron.BL/IndexSearch/IndexSearchBL.cs - Begründung: implementiert die Suche.
Prüfidee: Suche nach Ticketinhalt liefert Treffer < definierte Zeit.
Tracelinks: SyRS-033
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Nutzererwartung.
Status: belegt
```
```
ID: StRS-028
Titel: Sicherer Umgang mit Kundenzugangsdaten
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Techniker, Datenschutz
Vorbedingung: Zugangsdaten von Kundensystemen werden benötigt.
Fakt: Zwei Passwortverwaltungen mit Zugriffslogs, Siegeln, kundenbezogenen Rechten und Richtlinien sind implementiert.
Aussage: Zugangsdaten der Kundensysteme sollen verschlüsselt, feingranular berechtigt und mit lückenlosem Zugriffsnachweis verwaltet werden.
Ergebnis: Auditierbarer Passwortzugriff.
Belege:
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementBL.cs, PasswordManager/PasswordManagerBL.cs - Begründung: implementieren die Verwaltung.
Prüfidee: Passwortzugriff hinterlässt Logeintrag; Siegelbruch sichtbar.
Tracelinks: SyRS-017; SwRS-085, SwRS-086, SwRS-026
Konsolidierung: Kandidat: zwei Passwortmodule vereinigen
Übernahmewürdigkeit: übernehmen - MSP-Vertrauensbasis.
Status: belegt
```
```
ID: StRS-029
Titel: KI-Unterstützung im Tagesgeschäft
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Support, Administration
Vorbedingung: KI-Dienst konfiguriert.
Fakt: Ticket-Zusammenfassungen, Lösungsvorschläge, Prompt-Verwaltung und Modellanbindung sind implementiert.
Aussage: Mitarbeiter sollen KI-Unterstützung (Zusammenfassungen, Vorschläge) direkt im Vorgang erhalten; das Unternehmen kontrolliert Modelle und Prompts.
Ergebnis: Zeitersparnis im Support.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/ArtificialIntelligence/ArtificialIntelligenceBL.cs - Begründung: implementiert die KI-Funktionen.
Prüfidee: Ticketzusammenfassung erzeugen und fachlich bewerten.
Tracelinks: SyRS-019
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Differenzierungsmerkmal.
Status: belegt
```
```
ID: StRS-030
Titel: Datenschutz und Nachvollziehbarkeit (DSGVO, Audit)
Ebene: StRS
Typ: Sicherheit
Qualitätsmerkmal:
Akteur: Datenschutzbeauftragter, Geschäftsführung
Vorbedingung: -
Fakt: DSGVO-Löschung mit Protokoll, Änderungsmetadaten an allen Objekten, Rechte-/Zugriffs-/Beleglogs und transaktionale Speicherung sind implementiert.
Aussage: Das Unternehmen soll Betroffenenrechte (Löschung) erfüllen und jede relevante Änderung einem Verursacher zuordnen können.
Ergebnis: DSGVO-Konformität und Auditierbarkeit.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs; DBBaseBL.cs (Änderungsmetadaten) - Begründung: implementieren die Pflichten.
Prüfidee: Löschantrag ausführen; Protokoll weist Durchführung nach.
Tracelinks: SyRS-022, SyRS-009, SyRS-010
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - gesetzlich.
Status: belegt
```
```
ID: StRS-031
Titel: Automatisierter, wartbarer Systembetrieb
Ebene: StRS
Typ: nicht-funktional
Qualitätsmerkmal: Zuverlässigkeit, Übertragbarkeit
Akteur: IT-Betrieb (Systemhaus), Hersteller
Vorbedingung: -
Fakt: Steuerbare Hintergrunddienste, Wartungsskripte, Container-Deployment, Installer, Testsuiten und Diagnosefunktionen sind implementiert.
Aussage: Das System soll automatisiert betrieben, aktualisiert und überwacht werden können, mit reproduzierbaren Deployments.
Ergebnis: Geringer Betriebsaufwand, sichere Updates.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/BackgroundServices/BackgroundServiceBL.cs; docker/compose/compose.yaml - Begründung: implementieren den Betrieb.
Prüfidee: Update-Durchlauf mit Skriptausführung und Regressionstests.
Tracelinks: SyRS-018, SyRS-047, SyRS-048, SyRS-049
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Basis der SaaS-Fähigkeit.
Status: belegt
```
```
ID: StRS-032
Titel: Anpassbarkeit ohne Programmierung
Ebene: StRS
Typ: nicht-funktional
Qualitätsmerkmal: Wartbarkeit (Modifizierbarkeit)
Akteur: Administrator, Customizing
Vorbedingung: -
Fakt: Tausende Einstellungen (AppSettingsConst), Custom-Properties, Custom-Tables, konfigurierbare Menüs, Reportvorlagen und Rechtestrukturen sind implementiert.
Aussage: Das Systemhaus soll das System an eigene Prozesse anpassen können (Felder, Einstellungen, Menüs, Vorlagen), ohne Individualprogrammierung.
Ergebnis: Hohe Passgenauigkeit je Installation.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Settings/AppSettingsBL.cs, Customization/ModuleCustomPropertyBL.cs - Begründung: implementieren die Anpassbarkeit.
Prüfidee: Prozessvariante rein per Konfiguration abbilden.
Tracelinks: SyRS-023
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - Produkt-DNA; Wildwuchs im Zielsystem eindämmen.
Status: belegt
```
```
ID: StRS-033
Titel: Mehrfirmen- und Filialbetrieb
Ebene: StRS
Typ: funktional
Qualitätsmerkmal:
Akteur: Unternehmensgruppe, Filialen
Vorbedingung: Mehrere Firmen/Standorte.
Fakt: Mandanten, Filialen mit eigenen Nummernkreisen, Erlöskonten, filialbezogene Rechte und Belege sind implementiert.
Aussage: Unternehmensgruppen sollen mehrere Firmen und Standorte mit getrennten Nummernkreisen und Konten in einer Installation führen können.
Ergebnis: Konzernfähigkeit.
Belege:
- [PRIMÄR] src/backend/Centron.BL/Administration/Company/MandatorBL.cs, BranchBL.cs - Begründung: implementieren die Struktur.
Prüfidee: Zwei Mandanten mit getrennten Rechnungskreisen betreiben.
Tracelinks: SyRS-024, SyRS-012
Konsolidierung: nein
Übernahmewürdigkeit: übernehmen - im SaaS als Mandantenmodell.
Status: belegt
```
@@ -0,0 +1,60 @@
# Traceability – c-entron ERP-Suite
Konsolidierte Traceability-Tabelle über die drei Ebenen (Forward: StRS → SyRS → SwRS; Backward über dieselben Spalten). Der Artefaktbeleg nennt den führenden Modulpfad; die vollständigen Belege stehen in den Einzelanforderungen.
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg |
|---|---|---|---|
| StRS-012 | SyRS-001 | SwRS-001, SwRS-004, SwRS-014, SwRS-019, SwRS-020, SwRS-096 | src/backend/Centron.BL/Administration/Rights |
| StRS-019, StRS-012 | SyRS-002 | SwRS-001 | src/backend/Centron.BL/Administration/Rights |
| StRS-013, StRS-014 | SyRS-003 | SwRS-005, SwRS-009, SwRS-022, SwRS-028, SwRS-133, SwRS-139 | src/backend/Centron.BL/Administration/Logins; src/backend/Centron.BL/Administration/Licensing |
| StRS-013 | SyRS-004 | SwRS-002 | src/backend/Centron.BL/Administration/Logins |
| StRS-013 | SyRS-005 | SwRS-003, SwRS-011, SwRS-042, SwRS-144 | src/backend/Centron.BL/Administration/Logins |
| StRS-012, StRS-013 | SyRS-006 | - | src/backend/Centron.BL/Administration/Logins |
| StRS-012, StRS-013 | SyRS-007 | - | src/backend/Centron.BL/Administration/Logins |
| StRS-012 | SyRS-008 | SwRS-004, SwRS-008 | src/backend/Centron.BL/Administration/Rights |
| StRS-030 | SyRS-009 | SwRS-007, SwRS-137, SwRS-138 | src/backend/Centron.BL/ChangeTracking; src/backend/Centron.BL/Core |
| StRS-030 | SyRS-010 | SwRS-006, SwRS-111, SwRS-113, SwRS-137, SwRS-138 | src/backend/Centron.BL/Core |
| StRS-002, StRS-003 | SyRS-011 | SwRS-013, SwRS-018, SwRS-034, SwRS-051, SwRS-118, SwRS-140, SwRS-152, SwRS-154 | src/backend/Centron.BL/Sales/Receipts |
| StRS-003, StRS-012 | SyRS-012 | SwRS-010, SwRS-012, SwRS-016, SwRS-027 | src/backend/Centron.BL/Sales/Receipts; src/backend/Centron.BL/Administration/Mandatory |
| StRS-002, StRS-008, StRS-024 | SyRS-013 | SwRS-013, SwRS-014, SwRS-017, SwRS-071, SwRS-089, SwRS-112, SwRS-128 | src/backend/Centron.BL/Sales/Receipts; src/backend/Centron.BL/Warehousing |
| StRS-003 | SyRS-014 | SwRS-015, SwRS-154 | src/backend/Centron.BL/Sales/Receipts |
| StRS-002 | SyRS-015 | - | src/backend/Centron.BL/Sales/Receipts |
| StRS-002, StRS-030 | SyRS-016 | - | src/backend/Centron.BL/Sales/Receipts |
| StRS-013, StRS-028 | SyRS-017 | SwRS-021, SwRS-026, SwRS-085, SwRS-086, SwRS-101 | src/backend/Centron.BL/Administration/AccessTokens |
| StRS-031 | SyRS-018 | SwRS-024, SwRS-039, SwRS-062, SwRS-120 | src/backend/Centron.BL/Administration/BackgroundServices |
| StRS-029 | SyRS-019 | SwRS-023 | src/backend/Centron.BL/Administration/ArtificialIntelligence; src/backend/Centron.BL/ArtificialIntelligence |
| StRS-001, StRS-025 | SyRS-020 | SwRS-019, SwRS-020, SwRS-032, SwRS-061, SwRS-088, SwRS-090, SwRS-102, SwRS-103, SwRS-124, SwRS-152 | src/backend/Centron.BL/Accounts |
| StRS-030 | SyRS-022 | SwRS-030, SwRS-031 | src/backend/Centron.BL/Administration/DataSecurity |
| StRS-032 | SyRS-023 | SwRS-029, SwRS-033, SwRS-035, SwRS-036, SwRS-039, SwRS-040, SwRS-041, SwRS-042, SwRS-053, SwRS-064, SwRS-117, SwRS-122, SwRS-126 | src/backend/Centron.BL/Administration/Settings |
| StRS-033 | SyRS-024 | SwRS-027 | src/backend/Centron.BL/Administration/Company, .../CompanyInformations; src/backend/Centron.BL/Administration/Mandatory |
| StRS-009, StRS-016 | SyRS-021 | SwRS-025, SwRS-057, SwRS-058, SwRS-135, SwRS-141, SwRS-155 | src/backend/Centron.BL/DataExchange |
| StRS-015 | SyRS-025 | SwRS-038, SwRS-099, SwRS-107, SwRS-118, SwRS-132 | src/backend/Centron.BL/ReportEngine; src/backend/Centron.BL/Reporting |
| StRS-020 | SyRS-026 | SwRS-044, SwRS-056, SwRS-105, SwRS-125 | src/backend/Centron.BL/Administration/Documents, .../FileManagement |
| StRS-010, StRS-007, StRS-021 | SyRS-027 | SwRS-045, SwRS-052, SwRS-060, SwRS-063, SwRS-067, SwRS-069, SwRS-083, SwRS-091, SwRS-101, SwRS-123, SwRS-141, SwRS-148, SwRS-150 | src/backend/Centron.BL/EDI |
| StRS-022, StRS-023 | SyRS-028 | SwRS-054, SwRS-055, SwRS-059 | src/backend/Centron.BL/Devices; src/backend/Centron.BL/DocuBoard; src/backend/Centron.BL/Sales/CustomerAssets |
| StRS-018 | SyRS-029 | SwRS-043, SwRS-046, SwRS-049, SwRS-050, SwRS-070, SwRS-078, SwRS-079, SwRS-082, SwRS-104, SwRS-110, SwRS-116, SwRS-121, SwRS-157, SwRS-158 | src/backend/Centron.BL/Calendar; src/backend/Centron.BL/MyCentron; src/backend/Centron.BL/MyDay; src/backend/Centron.BL/ToDoArea |
| StRS-017 | SyRS-030 | SwRS-037, SwRS-115, SwRS-158 | src/backend/Centron.BL/Tapi; src/backend/Centron.BL/Administration/PhoneSettings |
| StRS-019 | SyRS-031 | SwRS-047, SwRS-048, SwRS-076, SwRS-077, SwRS-080, SwRS-081, SwRS-084, SwRS-108, SwRS-129, SwRS-130, SwRS-131, SwRS-134, SwRS-136, SwRS-142, SwRS-143, SwRS-145, SwRS-146, SwRS-147 | src/centron/Centron.WPF.UI, .../Centron.WPF.UI.Extension; src/nexus/CentronNexus; src/webservice/Centron.Controllers |
| StRS-009 | SyRS-032 | SwRS-065, SwRS-066, SwRS-135, SwRS-149, SwRS-155 | src/backend/Centron.BL/Finances |
| StRS-027 | SyRS-033 | SwRS-068 | src/backend/Centron.BL/IndexSearch |
| StRS-008 | SyRS-034 | SwRS-075 | src/backend/Centron.BL/MassUpdate |
| StRS-017, StRS-026 | SyRS-035 | SwRS-072, SwRS-074, SwRS-157 | src/backend/Centron.BL/Mail |
| StRS-017, StRS-005 | SyRS-036 | SwRS-073, SwRS-087, SwRS-109 | src/backend/Centron.BL/MailScanner |
| StRS-004 | SyRS-037 | SwRS-092, SwRS-093 | src/backend/Centron.BL/Sales/CustomerAssets |
| StRS-004, StRS-003 | SyRS-038 | SwRS-093, SwRS-094, SwRS-150 | src/backend/Centron.BL/Sales/CustomerAssets |
| StRS-006, StRS-005 | SyRS-039 | SwRS-095, SwRS-106 | src/backend/Centron.BL/Sales/CustomerAssets; src/backend/Centron.BL/Sales/Support |
| StRS-005, StRS-012 | SyRS-040 | SwRS-096, SwRS-097, SwRS-099, SwRS-114, SwRS-119 | src/backend/Centron.BL/Sales/Support |
| StRS-005 | SyRS-041 | SwRS-098 | src/backend/Centron.BL/Sales/Support |
| StRS-003, StRS-009 | SyRS-042 | SwRS-100, SwRS-127 | src/backend/Centron.BL/Sales/CashBooks |
| StRS-010, StRS-003 | SyRS-043 | SwRS-141 | src/backend/Centron.BL/DataExchange; src/backend/Centron.BL/ReportEngine; src/backend/Centron.Gateway; src/apis/Centron.Api.EbInterface |
| StRS-011 | SyRS-044 | SwRS-151 | src/apis/Centron.Api.Gls; src/apis/Centron.Api.Shipcloud |
| StRS-019 | SyRS-045 | SwRS-145, SwRS-156 | src/nexus/CentronNexus |
| StRS-013, StRS-012 | SyRS-046 | SwRS-136, SwRS-147 | src/webservice/Centron.Controllers |
| StRS-031 | SyRS-047 | SwRS-146, SwRS-153 | docker |
| StRS-031 | SyRS-048 | SwRS-153 | deployment; scripts |
| StRS-031 | SyRS-049 | SwRS-153 | tests; docker |
| StRS-009, StRS-003 | SyRS-050 | - | src/backend/Centron.BL/Administration/Settings; src/backend/Centron.BL/Finances |
**SwRS ohne SyRS-Referenz:** keine – jede SwRS-Anforderung referenziert mindestens eine SyRS-Anforderung.
**StRS ohne referenzierende SyRS-Anforderung:** keine – jede StRS-Anforderung wird von mindestens einer SyRS-Anforderung referenziert.
@@ -0,0 +1,197 @@
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Iteration 02
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Iteration:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
vorhandene Iterationsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-27T00:24:41.6237308+02:00
- **Endzeit:** 2026-08-27T07:28:28.0825221+02:00
- **Dauer gesamt:** 7:03:46 (`duration_ms` 7:03:44; API: 7:01:25)
— **im Parallelbetrieb erhoben, nicht für Laufzeitvergleiche verwendbar**
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP` (24.662 versionierte Dateien)
- **Codebasis-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja (Prüfmuster ohne Treffer);
die Codebasis ist seit Commit `f045b99a` kein eigenes Repository mehr, sondern Teil des
Arbeitsrepos – der Vorher/Nachher-Vergleich läuft deshalb pfadskopiert
- **Snapshot-Zusatzartefakte:** keine – der Snapshot entspricht dem Commit-Stand
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **CLI-Pfad:** `C:\Users\ChristophSchwoerer\.vscode\extensions\anthropic.claude-code-2.1.246-win32-x64\resources\native-binary\claude.exe`
- **Modell (angefordert):** `claude-fable-5`
- **Modelle (tatsächlich eingesetzt):** `claude-fable-5` 30.635.548 Tokens (99.98 %), `claude-haiku-4-5-20251001` 6.969 Tokens (0.02 %)
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
- **Effort:** `high` (per `--effort high` gesetzt)
- **Laufverzeichnis-ID:** `v7.0.0-35a4`
- **Ablage:** `Iteration 3/claude-fable-5/solo/high/`
- **Parallele Läufe:** nein – die Zeitangaben sind für Laufzeitvergleiche verwendbar
- **Agentenmodus:** `solo` (V1)
- **Kontextfenster:** 1.000.000 Tokens; `maxOutputTokens` 64.000
- **Sampling-Parameter:** nicht steuerbar über die CLI, nicht erfasst
- **Nur bei lokalem Modellbetrieb:** entfällt (Cloud-Inferenz, `provider: firstParty`)
- **Permission-Mode:** `acceptEdits`
- **Toolfreigabe:** `--allowedTools "Bash" "PowerShell"` /
`--disallowedTools` 33er-Denylist (schreibende und bauende Kommandos) **zuzüglich** `Task`, `Agent`, `Workflow` aus dem Modus `solo`
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **MCP-Server / Agentendateien:** keine – aus dem Snapshot entfernt, zusätzlich `--safe-mode`
- **Subagenten:** keine (`spawned` = 0, `by_type` leer)
- **Verschachtelung:** `spawned` = 0, davon `spawned_by_subagents` = 0, `max_depth` = 0. Keine tieferen Ebenen, `_meta\subagenten.md` entfällt.
## Validierungsstichprobe
- **Größe:** noch nicht festgelegt
- **Ziehungsverfahren:** noch nicht festgelegt
- **Validatoren:** noch nicht festgelegt
- **Stand:** noch nicht gezogen
## Verbrauch
### Hauptagent (`usage`)
| Messgröße | Wert |
|---|---:|
| Input-Tokens | 246 |
| Output-Tokens | 280.683 (davon 40.204 Thinking-Tokens) |
| Cache-Write-Tokens | 816.487 |
| Cache-Read-Tokens | 28.808.092 |
| Agent-Turns | 139 |
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
| Messgröße | `claude-fable-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 250 | 6.945 | 7.195 |
| Output-Tokens | 281.133 | 24 | 281.157 |
| Cache-Write-Tokens | 1.178.596 | 0 | 1.178.596 |
| Cache-Read-Tokens | 29.175.569 | 0 | 29.175.569 |
| **Tokens gesamt** | **30.635.548** | **6.969** | **30.642.517** |
**Tokens gesamt: 30.642.517** — Input + Output + Cache-Write + Cache-Read über alle Modelle.
Das ist die **berichtete Aufwandsgröße** der Versuchsreihe. `total_cost_usd` bleibt unberührt in
`RawResult.json` erhalten, wird aber nicht ins Protokoll übernommen: Token sind modell- und
preisunabhängig und bleiben damit über Preisänderungen und Modellwechsel hinweg vergleichbar.
Da im Modus `solo` keine Subagenten laufen, sind `usage` und `modelUsage` für das Hauptmodell
deckungsgleich; die Differenz zur Summe stammt allein aus den Haiku-Hilfsaufrufen.
## 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 |
|---|---:|---:|
| StRS | 33 | 13,7 % |
| SyRS | 50 | 20,7 % |
| SwRS | 158 | 65,6 % |
| **Gesamt** | **241** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 133 | 55,2 % |
| Sicherheit | 32 | 13,3 % |
| Schnittstelle | 25 | 10,4 % |
| funktional (Abrechnung) | 19 | 7,9 % |
| nicht-funktional | 16 | 6,6 % |
| Daten | 12 | 5,0 % |
| Schnittstelle (Abrechnung) | 2 | 0,8 % |
| funktional (Abrechnung/Fakturierung) | 1 | 0,4 % |
| Sicherheit (Abrechnung) | 1 | 0,4 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 283 |
| davon `PRIMÄR` | 252 (89,0 %) |
| davon `SEKUNDÄR` | 18 (6,4 %) |
| davon `KONTEXT` | 13 (4,6 %) |
| Belege je Anforderung (Median) | 1 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 237 (98,3 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 218 | 90,5 % |
| workaround | 9 | 3,7 % |
| sonderfall | 7 | 2,9 % |
| veraltet | 7 | 2,9 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 235 | 97,5 % |
| als `HYPOTHESE` gekennzeichnet | 6 | 2,5 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 41 | 17,0 % |
| mit ISO-25010-Qualitätsmerkmal | 16 | 6,6 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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** (74 risikorelevante Anforderungen, alle gedeckt) |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 241 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 241 von 241 mit Tracelinks (100,0 %) |
## Ergebnis
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
- **Session-ID:** `03603a98-feb4-43f9-8f8c-1621115f6c38`
- **Permission-Denials:** 2 (2 × `Bash`) – **keines auf `Task`/`Agent`/`Workflow`**. Der Agent hat zu keinem Zeitpunkt zu delegieren versucht; die Modus-Sperre wurde nie ausgelöst.
- **Kontrolle Agentenmodus:** `subagent_stats.spawned` = 0 – Bedingung `solo` eingehalten
- **Subagenten-Prompts:** entfällt (Modus `solo`)
- **Erzeugte Dateien:** 7 Dateien in `Ergebnisse\`:
| Datei | Größe |
|---|---:|
| `Analysebericht.md` | 43.009 B |
| `Glossar.md` | 4.881 B |
| `Hypothesen.md` | 2.131 B |
| `StRS.md` | 33.169 B |
| `SwRS.md` | 201.104 B |
| `SyRS.md` | 83.391 B |
| `Traceability.md` | 6.885 B |
- **Root unverändert:** ja (zeilenendennormalisiert verglichen).
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
## Anmerkungen/Auffälligkeiten
**1. Neue Zelle: `claude-fable-5` / `solo` / `high`.** Erster gültiger Lauf dieser Kombination;
der vorausgegangene Versuch `195958_v7.0.0-77a1` scheiterte am Session-Kontingent.
**2. Die Modellkontrolle ist sauber – und grenzt den Fable-Befund ein.** `modelUsage` weist
ausschließlich `claude-fable-5` plus Haiku-Hilfsaufrufe aus. Im Modus `builtin` war bei Fable
zweimal `claude-opus-5[1m]` aufgetreten, zuletzt im Lauf `d694` desselben Blocks. Damit steht
fest: **Nicht Fable ist das Problem, sondern Fable in Kombination mit Delegation.** Ohne
Subagenten wird das angeforderte Modell eingehalten.
**3. Zweithöchster `PRIMÄR`-Anteil der Reihe: 89,0 %** von 283 Belegen, 98,3 % der Anforderungen
mit mindestens einem Primärbeleg – bei nur 30,6 Mio. Tokens. Das günstigste Modell liefert hier
die sauberste Belegarbeit.
**4. Vollständig regelkonform:** alle fünf Prüfkriterien erfüllt, einschließlich der
risikobasierten Priorisierung (74 risikorelevante Anforderungen, alle gedeckt) und Tracelinks bei
100 %. Das gelang sonst nur `f631`, `2316`, `b652` und den drei `max`-Läufen.
**5. Belegdichte Median 1,0** – Fable schreibt einen Beleg je Anforderung. Zusammen mit Opus
(2,0 auf `high`) und Sonnet (1,0) stützt das den Befund aus Punkt 2 des Laufs `2269`: Die
Belegdichte folgt dem Modell.
**6. Die Wanduhrzeit von 7:03:44 ist unbrauchbar – aus einem neuen Grund.** Nicht Parallelbetrieb,
sondern **Kontingent-Wartezeiten**: Zwischen den Werkzeugaufrufen lagen Lücken von 4:00 h
(23:08 → 03:08) und zweimal rund 2 h. Die CLI bricht bei erschöpftem Kontingent nicht ab, sondern
wartet auf das nächste Reset-Fenster. `duration_ms` bildet diese Wartezeit mit ab. Damit ist ein
dritter Verzerrungsmechanismus der Zeitmessung dokumentiert, neben Parallelbetrieb und Abbruch.
Tokenverbrauch, Anforderungszahl und Belegkennzahlen sind davon **nicht** betroffen.
**7. Zwei Permission-Denials**, keiner auf `Task`/`Agent`/`Workflow`. `spawned` = 0.
@@ -0,0 +1,242 @@
ReqID Titel Ebene Module Trace Risiko PRIMAER Status Konsolidierung
SyRS-001 Gruppenbasierte Benutzerrechtepruefung SyRS M-024 StRS-012 J J belegt Kandidat:SyRS-002
SyRS-002 Getrenntes Rechtemodell fuer Web-Accounts SyRS M-024 StRS-019,StRS-012 J J belegt Kandidat:SyRS-001
SyRS-003 Ticketbasierte Sitzungen mit Lizenzpruefung SyRS M-017,M-016 StRS-013,StRS-014 J J belegt nein
SyRS-004 Mehrere Authentifizierungsverfahren SyRS M-017 StRS-013 J J belegt nein
SyRS-005 Zwei-Faktor-Authentifizierung SyRS M-017 StRS-013 J J belegt Kandidat:SwRS-011
SyRS-006 Zeitgesteuerte Kontodeaktivierung SyRS M-017 StRS-012,StRS-013 J J belegt nein
SyRS-007 Anwendungsbezogene Anmelderechte SyRS M-017 StRS-012,StRS-013 J J belegt nein
SyRS-008 Standard-Rechtegruppen SyRS M-024 StRS-012 J J belegt nein
SyRS-009 Aenderungsnachverfolgung SyRS M-036,M-039 StRS-030 N J belegt nein
SyRS-010 Transaktionale Speicherung SyRS M-039 StRS-030 N J belegt nein
SwRS-001 Rechteermittlung SQL+Cache SwRS M-024 SyRS-001,SyRS-002 J J belegt nein
SwRS-002 Passwort SHA1 ungesalzen SwRS M-017 SyRS-004 J J belegt nein
SwRS-003 2FA-Validatorwahl SwRS M-017 SyRS-005 J J belegt nein
SwRS-004 Rechtegruppenverwaltung SwRS M-024 SyRS-001,SyRS-008 J J belegt nein
SwRS-005 Ticket-Wiederverwendung+LoginIP SwRS M-017 SyRS-003 J J belegt nein
SwRS-006 Speicher-Template Hooks SwRS M-039 SyRS-010 N J belegt nein
SwRS-007 Erstellungs-/Aenderungsmetadaten SwRS M-036,M-039 SyRS-009 N J belegt nein
SwRS-008 Standardrechtegruppen aus Ressource SwRS M-024 SyRS-008 J J belegt nein
SwRS-009 Signaturvalidierte Lizenzdatei SwRS M-016 SyRS-003 J J belegt nein
SyRS-011 Belegkette Weiterfuehrungswege SyRS M-083 StRS-002,StRS-003 J J belegt Kandidat:CustomerAssets-Modell
SyRS-012 Nummernkreise je Mandant/Filiale SyRS M-083,M-018 StRS-003,StRS-012 J J belegt nein
SyRS-013 Bestandswirkung der Belege SyRS M-083,M-115 StRS-002,StRS-008,StRS-024 J J belegt nein
SyRS-014 Mindestpreisschutz SyRS M-083 StRS-003 J J belegt nein
SyRS-015 Belegsperren+Concurrency SyRS M-083 StRS-002 N J belegt nein
SyRS-016 Belegversionierung SyRS M-083 StRS-002,StRS-030 N J belegt nein
SwRS-010 Belegnummernvergabe+Templatekunde SwRS M-083 SyRS-012 J J belegt nein
SwRS-011 TOTP-Zweitfaktor SwRS M-111 SyRS-005 J J belegt Kandidat:SyRS-005
SwRS-012 Nummernkreis-Kaskade SwRS M-018 SyRS-012 J J belegt nein
SwRS-013 IReceiptSpecificLogic-Strategie SwRS M-083 SyRS-011,SyRS-013 N J belegt nein
SwRS-014 Negativbuchung nur mit Recht SwRS M-083,M-115 SyRS-013,SyRS-001 J J belegt nein
SwRS-015 Mindestpreis-Reauth SwRS M-083 SyRS-014 J J belegt nein
SwRS-016 Filialzuordnung BranchOrigin SwRS M-083 SyRS-012 N J belegt nein
SwRS-017 Seriennummern-Vollstaendigkeit SwRS M-083 SyRS-013 N J belegt nein
SwRS-018 Firmengruppen-Belegeinstellungen SwRS M-083 SyRS-011 N J belegt nein
SyRS-017 API-Zugriffstokens SyRS M-003 StRS-013,StRS-028 J J belegt nein
SyRS-018 Steuerbare Hintergrunddienste SyRS M-006 StRS-031 N J belegt nein
SyRS-019 KI-Assistenz konfigurierbar SyRS M-005,M-030 StRS-029 N J belegt nein
SwRS-019 Bankverbindungen Rechte+Default SwRS M-001 SyRS-001,SyRS-020 J J belegt nein
SwRS-020 Kontenstamm Rechte+FiBu-Nummer SwRS M-002 SyRS-001,SyRS-020 J J belegt nein
SwRS-021 API-Token Hash+Ablauf+Log SwRS M-003 SyRS-017 J J belegt nein
SwRS-022 Client-Version je Anmeldung SwRS M-004 SyRS-003 N J belegt nein
SwRS-023 KI-Prompts+verschluesselte Keys SwRS M-005 SyRS-019 N J belegt nein
SwRS-024 Hintergrunddienst-Zustand SwRS M-006 SyRS-018 N J belegt nein
SwRS-025 Kontenrahmenverwaltung SwRS M-007 SyRS-021 N J belegt nein
SwRS-026 Konfig-DB Masterkey SwRS M-008 SyRS-017,StRS-028 J J belegt Kandidat:SwRS-023
SyRS-020 Konten-/Adressstamm SyRS M-002 StRS-001,StRS-025 N J belegt nein
SyRS-022 DSGVO Loeschkonzept SyRS M-012 StRS-030 J J belegt nein
SyRS-023 Zentrale Konfiguration SyRS M-026 StRS-032 N J belegt nein
SyRS-024 Mandanten-/Filialstruktur SyRS M-009,M-018 StRS-033 N J belegt nein
SwRS-027 Kollisionssichere Nummernvergabe SwRS M-009 SyRS-012,SyRS-024 J J belegt nein
SwRS-028 Verbindungsverwaltung SwRS M-010 SyRS-003 N J belegt nein
SwRS-029 Custom Properties je Modul SwRS M-011 SyRS-023 N J belegt Kandidat:M-043
SwRS-030 DSGVO-Kontaktloeschung SwRS M-012 SyRS-022 J J belegt nein
SwRS-031 Online-AVV/SEPA-Dokumente SwRS M-013 SyRS-022,StRS-020 N J belegt Kandidat:Nexus-Signierung
SwRS-032 Mitarbeiter Abteilungen/Skills SwRS M-014 SyRS-020,StRS-012 N J belegt nein
SwRS-033 DB-Umgebungspruefungen SwRS M-015 SyRS-023 N J belegt nein
SwRS-034 Konditionen-Stammdaten SwRS M-019 SyRS-011 N J belegt nein
SwRS-035 Netzwerkdiagnose SwRS M-020 SyRS-023 N J belegt nein
SwRS-036 Performance-Messungen SwRS M-021 SyRS-023 N J belegt nein
SwRS-037 Telefonie-Einstellungen SwRS M-022 SyRS-030 N J belegt nein
SwRS-038 Portal Statuspruefung/Reportupload SwRS M-023 SyRS-025 N J belegt nein
SwRS-039 Wartungsskripte+SQL-Management SwRS M-025 SyRS-023,SyRS-018 N J belegt nein
SwRS-040 Typisierter Einstellungszugriff SwRS M-026 SyRS-023 N J belegt nein
SwRS-041 UI-Themes SwRS M-027 SyRS-023 N J belegt nein
SwRS-042 Webservice-Konfigurationsdatei SwRS M-028 SyRS-023,SyRS-005 N J belegt nein
SyRS-021 FiBu-Uebergabe DATEV SyRS M-044 StRS-009,StRS-016 J J belegt nein
SwRS-043 Terminanfragen SwRS M-029 SyRS-029,StRS-018 N J belegt nein
SwRS-044 Lieferantenbeleg-Ablage SwRS M-031 SyRS-026 N J belegt nein
SwRS-045 Distributoren auto-anlegen SwRS M-032 SyRS-027 N J belegt nein
SwRS-046 Kalender-Einstellungen SwRS M-033 SyRS-029,StRS-018 N J belegt nein
SwRS-047 Icon-Verwaltung SwRS M-034 SyRS-031 N J belegt nein
SwRS-048 Nexus-Einstellungen SwRS M-035 SyRS-031 N J belegt nein
SwRS-049 Chat SwRS M-037 SyRS-029,StRS-017 N J belegt nein
SwRS-050 Checklisten SwRS M-038 SyRS-029 N J belegt nein
SwRS-051 Laender/Waehrungen SwRS M-040 SyRS-011,StRS-001 N J belegt nein
SwRS-052 CPra-Konnektor SwRS M-041 SyRS-027 N J belegt nein
SwRS-053 Custom Tables SwRS M-043 SyRS-023 N J belegt Kandidat:SwRS-029
SwRS-054 AccountDevices SwRS M-045 SyRS-028,StRS-022 N J belegt Kandidat:Assets
SwRS-055 AssetManagement DocuBoard SwRS M-046 SyRS-028,StRS-022 N J belegt Kandidat:SwRS-054
SwRS-056 Dokumentationen SwRS M-047 SyRS-026,StRS-020 N J belegt nein
SwRS-057 FiBu-Exportkonfigurationen SwRS M-044 SyRS-021 J J belegt nein
SwRS-058 Doppeluebergabeschutz FiBu SwRS M-044 SyRS-021 J J belegt nein
SyRS-025 Report-Engine Belegdruck SyRS M-080,M-081 StRS-015 N J belegt nein
SyRS-026 Dokumenten-/Verzeichnisverwaltung SyRS M-013 StRS-020 N J belegt nein
SyRS-027 EDI-Bestelluebertragung SyRS M-048 StRS-010,StRS-007,StRS-021 N J belegt Kandidat:Gateway-EDI
SyRS-028 Kundengeraete/Assets SyRS M-045,M-046,M-084 StRS-022,StRS-023 N J belegt Kandidat:3 Datenhaltungen
SyRS-029 Organisation+Zusammenarbeit SyRS M-033,M-066,M-067,M-107 StRS-018 N J belegt nein
SyRS-030 TAPI-Telefonie SyRS M-101,M-022 StRS-017 N J belegt nein
SyRS-031 Mehrkanal-Clients SyRS M-127,M-130,M-133 StRS-019 N J belegt Kandidat:Doppel-UI
SyRS-032 Onlinebanking-Zahlungsabgleich SyRS M-053 StRS-009 J J belegt nein
SyRS-033 Volltextsuche SyRS M-056 StRS-027 N J belegt nein
SyRS-034 Massenaenderungen SyRS M-063 StRS-008 N J belegt nein
SyRS-035 E-Mail/Exchange SyRS M-060 StRS-017,StRS-026 N J belegt nein
SyRS-036 Mail-Scanner SyRS M-061 StRS-017,StRS-005 N J belegt Kandidat:Workflows
SwRS-059 RMA-Abwicklung SwRS M-042 SyRS-028,StRS-023 N J belegt nein
SwRS-060 EDI-Bestellerzeugung SwRS M-048 SyRS-027 N J belegt nein
SwRS-061 Mitarbeiterstatus/Dispatcher SwRS M-049 SyRS-020,StRS-012 N J belegt nein
SwRS-062 ExpectedEvents SwRS M-050 SyRS-018,StRS-031 N J belegt nein
SwRS-063 Externe Helpdesk-Konfiguration SwRS M-051 SyRS-027,StRS-005 N J belegt Kandidat:DocBee
SwRS-064 Externe Tools SwRS M-052 SyRS-023 N J belegt nein
SwRS-065 Zahlungseingangsprotokoll SwRS M-053 SyRS-032 J J belegt nein
SwRS-066 Bankumsatz-Zuordnung/Buchung SwRS M-053 SyRS-032 J J belegt nein
SwRS-067 CustomGateway Sonderartikel SwRS M-054 SyRS-027,StRS-004 N J belegt nein
SwRS-068 Lucene-Index inkrementell SwRS M-056 SyRS-033 N J belegt nein
SwRS-069 Shop-Integration ExternalId SwRS M-057 SyRS-027,StRS-019 N J belegt nein
SwRS-070 ItPlanner Kategorien SwRS M-058 SyRS-029 N J belegt nein
SwRS-071 Lagerorte+Umbuchungslog SwRS M-059 SyRS-013,StRS-008 N J belegt nein
SwRS-072 Signaturen+Blacklist SwRS M-060 SyRS-035 N J belegt nein
SwRS-073 MailScanner-Konfiguration SwRS M-061 SyRS-036 N J belegt nein
SwRS-074 Serien-Mailings SwRS M-062 SyRS-035,StRS-026 N J belegt nein
SwRS-075 Massenpreisaenderungen SwRS M-063 SyRS-034 N J belegt nein
SwRS-076 Mobile Mitarbeiterliste SwRS M-064 SyRS-031 N J belegt nein
SwRS-077 Modulkatalog+Favoriten SwRS M-065 SyRS-031,StRS-014 N J belegt nein
SwRS-078 Dashboards SwRS M-066 SyRS-029 N J belegt nein
SwRS-079 MyDay Arbeitsvorrat SwRS M-067 SyRS-029 N J belegt nein
SwRS-080 Nexus-Benachrichtigungen SwRS M-068 SyRS-031,StRS-018 N J belegt Kandidat:M-070
SwRS-081 Ticket-Ansichten Nexus SwRS M-069 SyRS-031,StRS-005 N J belegt nein
SwRS-082 Objekt-Benachrichtigungsempfaenger SwRS M-070 SyRS-029 N J belegt Kandidat:SwRS-080
SwRS-083 Externe Objektreferenzen SwRS M-071 SyRS-027 N J belegt nein
SwRS-084 Outlook-Assetsuche SwRS M-072 SyRS-031,StRS-022 N J belegt nein
SwRS-085 Kundenzugangsdaten+Logs SwRS M-073 SyRS-017,StRS-028 J J belegt Kandidat:M-074
SwRS-086 Passwortmanager Siegel SwRS M-074 SyRS-017,StRS-028 J J belegt Kandidat:SwRS-085
SwRS-087 Prozesse Schritte/Bindungen SwRS M-075 SyRS-036,StRS-031 N J belegt Kandidat:Workflows
SwRS-088 Produktmatrix SwRS M-076 SyRS-020,StRS-025 N J belegt nein
SwRS-089 Fertigungsauftraege SwRS M-077 SyRS-013,StRS-024 N J belegt nein
SwRS-090 Projektliste SwRS M-078 SyRS-020,StRS-025 N J belegt Kandidat:Projektbegriffe
SwRS-091 Bestellvorschlaege SwRS M-079 SyRS-027,StRS-007 N J belegt nein
SyRS-037 Vertragsverwaltung Laufzeit/Intervalle SyRS M-084 StRS-004 J J belegt nein
SyRS-038 Automatische Vertragsfakturierung SyRS M-084 StRS-004,StRS-003 J J belegt nein
SyRS-039 Timer-Billing SyRS M-084,M-086 StRS-006,StRS-005 J J belegt nein
SyRS-040 Helpdesk Rechte+Status SyRS M-086 StRS-005,StRS-012 J J belegt nein
SyRS-041 Ticket-Eskalation SyRS M-086 StRS-005 N J belegt nein
SyRS-042 Kassenbuch SyRS M-087 StRS-003,StRS-009 J J belegt nein
SwRS-092 Vertrags-Datumsarithmetik SwRS M-084 SyRS-037 J J belegt nein
SwRS-093 Auto-Vertragsschliessen SwRS M-084 SyRS-037,SyRS-038 J J belegt nein
SwRS-094 Abrechnungsfaellige Kunden+Zaehler SwRS M-084 SyRS-038 J J belegt nein
SwRS-095 Timer-Belegerzeugung SwRS M-084,M-086 SyRS-039 J J belegt nein
SwRS-096 Ticket-Rechtepruefung Save SwRS M-086 SyRS-040,SyRS-001 J J belegt nein
SwRS-097 Ticket-Sichtbarkeit restriktiv SwRS M-086 SyRS-040 J J belegt nein
SwRS-098 Eskalationslauf SwRS M-086 SyRS-041 N J belegt nein
SwRS-099 Ticketabschluss+Benachrichtigung SwRS M-086 SyRS-040,SyRS-025 N J belegt nein
SwRS-100 Kassenbuchbuchung SwRS M-087 SyRS-042 J J belegt nein
SwRS-101 Riverbird-Ticketvalidierung SwRS M-082 SyRS-017,SyRS-027 J J belegt nein
SwRS-102 Kundensuche Kompakt SwRS M-085 SyRS-020 N J belegt nein
SwRS-103 Telemarketing SwRS M-088 SyRS-020,StRS-026 N J belegt nein
SwRS-104 Terminverwaltung Schedule SwRS M-089 SyRS-029 N J belegt Kandidat:M-033
SwRS-105 Dokuwizard Infrastruktur SwRS M-090 SyRS-026,StRS-020 N J belegt Kandidat:M-047
SwRS-106 Stundenzuschlagssaetze SwRS M-091 SyRS-039 J J belegt nein
SwRS-107 PDF-Signatur SwRS M-092 SyRS-025,StRS-020 J J belegt nein
SwRS-108 SelfCare-Formulare SwRS M-093 SyRS-031,StRS-019 N J belegt Kandidat:WebHDQuestion
SwRS-109 Workflow-Prozesse SwRS M-094 SyRS-036,StRS-031 N J belegt Kandidat:SwRS-087
SwRS-110 Social-Media-Feed SwRS M-095 SyRS-029 N J belegt nein
SwRS-111 Start Mapping/Verbindung SwRS M-096 SyRS-010 N J belegt nein
SwRS-112 Inventur SwRS M-098 SyRS-013,StRS-008 J J belegt nein
SwRS-113 I3D-Systemtabelle SwRS M-099 SyRS-010 N J belegt nein
SwRS-114 Tags SwRS M-100 SyRS-040 N J belegt nein
SwRS-115 Anruferkennung SwRS M-101 SyRS-030 N J belegt nein
SwRS-116 TaskManager Handler SwRS M-102 SyRS-029,StRS-031 N J belegt Kandidat:M-107
SwRS-117 Telemetrie SwRS M-103 SyRS-023 N J belegt nein
SwRS-118 Textbausteine SwRS M-104 SyRS-025,SyRS-011 N J belegt nein
SwRS-119 Ticket-Projekte SwRS M-105 SyRS-040,StRS-025 N J belegt Kandidat:SwRS-090
SwRS-120 TimingSettings SwRS M-106 SyRS-018 N J belegt nein
SwRS-121 Objekt-ToDos SwRS M-107 SyRS-029 N J belegt Kandidat:SwRS-116
SwRS-122 Textformat-Konvertierung SwRS M-108 SyRS-023 N J belegt nein
SwRS-123 TradePool-Import SwRS M-109 SyRS-027 N J belegt nein
SwRS-124 Transaktionsobjekte SwRS M-110 SyRS-020 N J belegt nein
SwRS-125 SimpleUrls SwRS M-112 SyRS-026 N J belegt nein
SwRS-126 Videoportal-Zuordnung SwRS M-113 SyRS-023 N J belegt nein
SwRS-127 Gutscheinverwaltung SwRS M-114 SyRS-042 J J belegt nein
SwRS-128 Artikelstamm Systemartikel SwRS M-115 SyRS-013,StRS-008 N J belegt nein
SwRS-129 Aktions-Weblinks SwRS M-116 SyRS-031,StRS-019 N J belegt nein
SwRS-130 Webmenue-Konfiguration SwRS M-118 SyRS-031 N J belegt nein
SwRS-131 Webservice-Version SwRS M-119 SyRS-031 N J belegt nein
SwRS-132 PDF-Merge SwRS M-120 SyRS-025 N J belegt nein
SwRS-133 Typisierte Exceptions SwRS M-121 SyRS-003 N J belegt nein
SyRS-043 E-Rechnungsformate SyRS M-044,M-080,M-126,M-137 StRS-010,StRS-003 J J belegt nein
SyRS-044 Versanddienstleister SyRS M-138,M-139 StRS-011 N J belegt Kandidat:GLS-vs-Shipcloud
SyRS-045 Kundenportal Nexus SyRS M-130 StRS-019 N J belegt Kandidat:SelfCare
SyRS-046 REST-API Rechteautorisierung SyRS M-133 StRS-013,StRS-012 J J belegt nein
SyRS-047 Container-Betrieb SyRS M-148 StRS-031 N J belegt nein
SyRS-048 Windows-Installer SyRS M-147,M-149 StRS-031 N J belegt nein
SyRS-049 Testabdeckung SyRS M-151,M-148 StRS-031 N J belegt nein
SwRS-134 Grid-/UI-Profile SwRS M-055 SyRS-031 N J belegt nein
SwRS-135 Statistiken SwRS M-097 SyRS-021,SyRS-032,StRS-016 N J belegt nein
SwRS-136 Webservice-Fassaden SwRS M-117 SyRS-031,SyRS-046 N J belegt Kandidat:Doppel-BL
SwRS-137 DAO Event-Listener SwRS M-122 SyRS-010,SyRS-009 N J belegt nein
SwRS-138 Entitaetsmodell I3D SwRS M-123 SyRS-009,SyRS-010 N J belegt nein
SwRS-139 ModuleFeatures SwRS M-124 SyRS-003 N J belegt nein
SwRS-140 Objektartenkatalog SwRS M-125 SyRS-011 N J belegt nein
SwRS-141 Gateway-Formatadapter SwRS M-126 SyRS-027,SyRS-021,SyRS-043 N J belegt Kandidat:EDI-Doppel
SwRS-142 WPF-Client SwRS M-127 SyRS-031 N J belegt Kandidat:Nexus
SwRS-143 Controls-Bibliothek SwRS M-128 SyRS-031 N J belegt nein
SwRS-144 Core-Bibliothek TOTP SwRS M-129 SyRS-005 J J belegt nein
SwRS-145 Nexus-Webclient SwRS M-130,M-131,M-132 SyRS-031,SyRS-045 N J belegt Kandidat:SwRS-142
SwRS-146 Webservice-Hosting SwRS M-134,M-135,M-136 SyRS-047,SyRS-031 N J belegt nein
SwRS-147 Versionierte Controller SwRS M-133 SyRS-046,SyRS-031 J J belegt nein
SwRS-148 Distributor-Produktdaten SwRS M-140,M-141,M-143,M-144 SyRS-027,StRS-007 N J belegt nein
SwRS-149 finAPI-Client SwRS M-142 SyRS-032 J J belegt nein
SwRS-150 docuFORM-Anbindung SwRS M-145 SyRS-038,SyRS-027 N J belegt Kandidat:Assets
SwRS-151 GLS/Shipcloud Logik SwRS M-138,M-139 SyRS-044 N J belegt nein
SwRS-152 Legacy-DB-Schema Kunden SwRS M-146 SyRS-011,SyRS-020 N J belegt Kandidat:Bankdaten
SwRS-153 Release-Artefakte SwRS M-147,M-148,M-149 SyRS-047,SyRS-048,SyRS-049 N J belegt nein
SyRS-050 [HYPOTHESE] Mahnwesen SyRS M-026,M-053 StRS-009,StRS-003 J N HYPOTHESE nein
SwRS-154 [HYPOTHESE] Anzahlungsverrechnung SwRS M-083 SyRS-011,SyRS-014 J J HYPOTHESE nein
SwRS-155 [HYPOTHESE] SEPA-Lastschrift SwRS M-053,M-001 SyRS-032,SyRS-021 J J HYPOTHESE nein
SwRS-156 [HYPOTHESE] WebCart-Sonderpreise SwRS M-130,M-086 SyRS-045 N N HYPOTHESE nein
SwRS-157 [HYPOTHESE] Exchange-Sync SwRS M-060,M-033 SyRS-035,SyRS-029 N N HYPOTHESE Kandidat:SwRS-104
SwRS-158 [HYPOTHESE] Fernwartung Supremo SwRS M-067 SyRS-029,SyRS-030 N N HYPOTHESE nein
StRS-001 Geschaeftspartnerverwaltung StRS M-002 SyRS-020,SyRS-024 N J belegt nein
StRS-002 Angebots-/Auftragsabwicklung StRS M-083 SyRS-011,SyRS-015,SyRS-016 N J belegt nein
StRS-003 Geschuetzte Fakturierung StRS M-083,M-087 SyRS-012,SyRS-014,SyRS-042 J J belegt nein
StRS-004 Vertragsgeschaeft StRS M-084 SyRS-037,SyRS-038,SyRS-039 J J belegt nein
StRS-005 Helpdesk StRS M-086 SyRS-040,SyRS-041,SyRS-036 N J belegt nein
StRS-006 Leistungserfassung StRS M-084,M-086 SyRS-039 J J belegt nein
StRS-007 Einkauf+Distribution StRS M-079,M-048 SyRS-027 N J belegt nein
StRS-008 Artikel-/Lagerfuehrung StRS M-115,M-059,M-098 SyRS-013,SyRS-034 N J belegt nein
StRS-009 Finanzprozesse StRS M-053,M-044,M-087 SyRS-021,SyRS-032,SyRS-042,SyRS-050 J J belegt nein
StRS-010 E-Belegaustausch StRS M-044,M-048 SyRS-043,SyRS-027 J J belegt nein
StRS-011 Versandabwicklung StRS M-138,M-139 SyRS-044 N J belegt nein
StRS-012 Berechtigungssteuerung StRS M-024 SyRS-001,SyRS-002,SyRS-008 J J belegt nein
StRS-013 Sichere Anmeldung/API StRS M-017,M-003 SyRS-003,SyRS-004,SyRS-005,SyRS-017,SyRS-046 J J belegt nein
StRS-014 Lizenz-/Modulsteuerung StRS M-016,M-065 SyRS-003 J J belegt nein
StRS-015 Belegdruck/Berichte StRS M-080 SyRS-025 N J belegt nein
StRS-016 BW-Transparenz StRS M-097 SyRS-021 N J belegt nein
StRS-017 Integrierte Kommunikation StRS M-060,M-101,M-037 SyRS-035,SyRS-036,SyRS-030 N J belegt nein
StRS-018 Arbeitsorganisation StRS M-067,M-066 SyRS-029 N J belegt nein
StRS-019 Endkunden-Self-Service StRS M-130,M-093 SyRS-045,SyRS-002 N J belegt nein
StRS-020 Dokumente+Signatur StRS M-013,M-092 SyRS-026,SyRS-022 N J belegt nein
StRS-021 Konnektoren-Offenheit StRS M-071,M-044 SyRS-027 N J belegt nein
StRS-022 Kundengeraete-Ueberblick StRS M-045,M-046,M-084 SyRS-028 N J belegt Kandidat:Asset-Konzept
StRS-023 RMA StRS M-042 SyRS-028 N J belegt nein
StRS-024 Fertigung StRS M-077 SyRS-013 N J belegt nein
StRS-025 CRM/Projekte StRS M-078,M-076,M-105 SyRS-020 N J belegt Kandidat:Projektbegriffe
StRS-026 Marketing StRS M-062,M-088 SyRS-035 N J belegt nein
StRS-027 Zentrale Suche StRS M-056 SyRS-033 N J belegt nein
StRS-028 Kundenzugangsdaten StRS M-073,M-074 SyRS-017 J J belegt Kandidat:2 Passwortmodule
StRS-029 KI-Unterstuetzung StRS M-030,M-005 SyRS-019 N J belegt nein
StRS-030 DSGVO+Audit StRS M-012,M-036 SyRS-022,SyRS-009,SyRS-010 J J belegt nein
StRS-031 Automatisierter Betrieb StRS M-006,M-148,M-147,M-151 SyRS-018,SyRS-047,SyRS-048,SyRS-049 N J belegt nein
StRS-032 Anpassbarkeit StRS M-026,M-011,M-043 SyRS-023 N J belegt nein
StRS-033 Mehrfirmen-/Filialbetrieb StRS M-009,M-018 SyRS-024,SyRS-012 N J belegt nein
1 ReqID Titel Ebene Module Trace Risiko PRIMAER Status Konsolidierung
2 SyRS-001 Gruppenbasierte Benutzerrechtepruefung SyRS M-024 StRS-012 J J belegt Kandidat:SyRS-002
3 SyRS-002 Getrenntes Rechtemodell fuer Web-Accounts SyRS M-024 StRS-019,StRS-012 J J belegt Kandidat:SyRS-001
4 SyRS-003 Ticketbasierte Sitzungen mit Lizenzpruefung SyRS M-017,M-016 StRS-013,StRS-014 J J belegt nein
5 SyRS-004 Mehrere Authentifizierungsverfahren SyRS M-017 StRS-013 J J belegt nein
6 SyRS-005 Zwei-Faktor-Authentifizierung SyRS M-017 StRS-013 J J belegt Kandidat:SwRS-011
7 SyRS-006 Zeitgesteuerte Kontodeaktivierung SyRS M-017 StRS-012,StRS-013 J J belegt nein
8 SyRS-007 Anwendungsbezogene Anmelderechte SyRS M-017 StRS-012,StRS-013 J J belegt nein
9 SyRS-008 Standard-Rechtegruppen SyRS M-024 StRS-012 J J belegt nein
10 SyRS-009 Aenderungsnachverfolgung SyRS M-036,M-039 StRS-030 N J belegt nein
11 SyRS-010 Transaktionale Speicherung SyRS M-039 StRS-030 N J belegt nein
12 SwRS-001 Rechteermittlung SQL+Cache SwRS M-024 SyRS-001,SyRS-002 J J belegt nein
13 SwRS-002 Passwort SHA1 ungesalzen SwRS M-017 SyRS-004 J J belegt nein
14 SwRS-003 2FA-Validatorwahl SwRS M-017 SyRS-005 J J belegt nein
15 SwRS-004 Rechtegruppenverwaltung SwRS M-024 SyRS-001,SyRS-008 J J belegt nein
16 SwRS-005 Ticket-Wiederverwendung+LoginIP SwRS M-017 SyRS-003 J J belegt nein
17 SwRS-006 Speicher-Template Hooks SwRS M-039 SyRS-010 N J belegt nein
18 SwRS-007 Erstellungs-/Aenderungsmetadaten SwRS M-036,M-039 SyRS-009 N J belegt nein
19 SwRS-008 Standardrechtegruppen aus Ressource SwRS M-024 SyRS-008 J J belegt nein
20 SwRS-009 Signaturvalidierte Lizenzdatei SwRS M-016 SyRS-003 J J belegt nein
21 SyRS-011 Belegkette Weiterfuehrungswege SyRS M-083 StRS-002,StRS-003 J J belegt Kandidat:CustomerAssets-Modell
22 SyRS-012 Nummernkreise je Mandant/Filiale SyRS M-083,M-018 StRS-003,StRS-012 J J belegt nein
23 SyRS-013 Bestandswirkung der Belege SyRS M-083,M-115 StRS-002,StRS-008,StRS-024 J J belegt nein
24 SyRS-014 Mindestpreisschutz SyRS M-083 StRS-003 J J belegt nein
25 SyRS-015 Belegsperren+Concurrency SyRS M-083 StRS-002 N J belegt nein
26 SyRS-016 Belegversionierung SyRS M-083 StRS-002,StRS-030 N J belegt nein
27 SwRS-010 Belegnummernvergabe+Templatekunde SwRS M-083 SyRS-012 J J belegt nein
28 SwRS-011 TOTP-Zweitfaktor SwRS M-111 SyRS-005 J J belegt Kandidat:SyRS-005
29 SwRS-012 Nummernkreis-Kaskade SwRS M-018 SyRS-012 J J belegt nein
30 SwRS-013 IReceiptSpecificLogic-Strategie SwRS M-083 SyRS-011,SyRS-013 N J belegt nein
31 SwRS-014 Negativbuchung nur mit Recht SwRS M-083,M-115 SyRS-013,SyRS-001 J J belegt nein
32 SwRS-015 Mindestpreis-Reauth SwRS M-083 SyRS-014 J J belegt nein
33 SwRS-016 Filialzuordnung BranchOrigin SwRS M-083 SyRS-012 N J belegt nein
34 SwRS-017 Seriennummern-Vollstaendigkeit SwRS M-083 SyRS-013 N J belegt nein
35 SwRS-018 Firmengruppen-Belegeinstellungen SwRS M-083 SyRS-011 N J belegt nein
36 SyRS-017 API-Zugriffstokens SyRS M-003 StRS-013,StRS-028 J J belegt nein
37 SyRS-018 Steuerbare Hintergrunddienste SyRS M-006 StRS-031 N J belegt nein
38 SyRS-019 KI-Assistenz konfigurierbar SyRS M-005,M-030 StRS-029 N J belegt nein
39 SwRS-019 Bankverbindungen Rechte+Default SwRS M-001 SyRS-001,SyRS-020 J J belegt nein
40 SwRS-020 Kontenstamm Rechte+FiBu-Nummer SwRS M-002 SyRS-001,SyRS-020 J J belegt nein
41 SwRS-021 API-Token Hash+Ablauf+Log SwRS M-003 SyRS-017 J J belegt nein
42 SwRS-022 Client-Version je Anmeldung SwRS M-004 SyRS-003 N J belegt nein
43 SwRS-023 KI-Prompts+verschluesselte Keys SwRS M-005 SyRS-019 N J belegt nein
44 SwRS-024 Hintergrunddienst-Zustand SwRS M-006 SyRS-018 N J belegt nein
45 SwRS-025 Kontenrahmenverwaltung SwRS M-007 SyRS-021 N J belegt nein
46 SwRS-026 Konfig-DB Masterkey SwRS M-008 SyRS-017,StRS-028 J J belegt Kandidat:SwRS-023
47 SyRS-020 Konten-/Adressstamm SyRS M-002 StRS-001,StRS-025 N J belegt nein
48 SyRS-022 DSGVO Loeschkonzept SyRS M-012 StRS-030 J J belegt nein
49 SyRS-023 Zentrale Konfiguration SyRS M-026 StRS-032 N J belegt nein
50 SyRS-024 Mandanten-/Filialstruktur SyRS M-009,M-018 StRS-033 N J belegt nein
51 SwRS-027 Kollisionssichere Nummernvergabe SwRS M-009 SyRS-012,SyRS-024 J J belegt nein
52 SwRS-028 Verbindungsverwaltung SwRS M-010 SyRS-003 N J belegt nein
53 SwRS-029 Custom Properties je Modul SwRS M-011 SyRS-023 N J belegt Kandidat:M-043
54 SwRS-030 DSGVO-Kontaktloeschung SwRS M-012 SyRS-022 J J belegt nein
55 SwRS-031 Online-AVV/SEPA-Dokumente SwRS M-013 SyRS-022,StRS-020 N J belegt Kandidat:Nexus-Signierung
56 SwRS-032 Mitarbeiter Abteilungen/Skills SwRS M-014 SyRS-020,StRS-012 N J belegt nein
57 SwRS-033 DB-Umgebungspruefungen SwRS M-015 SyRS-023 N J belegt nein
58 SwRS-034 Konditionen-Stammdaten SwRS M-019 SyRS-011 N J belegt nein
59 SwRS-035 Netzwerkdiagnose SwRS M-020 SyRS-023 N J belegt nein
60 SwRS-036 Performance-Messungen SwRS M-021 SyRS-023 N J belegt nein
61 SwRS-037 Telefonie-Einstellungen SwRS M-022 SyRS-030 N J belegt nein
62 SwRS-038 Portal Statuspruefung/Reportupload SwRS M-023 SyRS-025 N J belegt nein
63 SwRS-039 Wartungsskripte+SQL-Management SwRS M-025 SyRS-023,SyRS-018 N J belegt nein
64 SwRS-040 Typisierter Einstellungszugriff SwRS M-026 SyRS-023 N J belegt nein
65 SwRS-041 UI-Themes SwRS M-027 SyRS-023 N J belegt nein
66 SwRS-042 Webservice-Konfigurationsdatei SwRS M-028 SyRS-023,SyRS-005 N J belegt nein
67 SyRS-021 FiBu-Uebergabe DATEV SyRS M-044 StRS-009,StRS-016 J J belegt nein
68 SwRS-043 Terminanfragen SwRS M-029 SyRS-029,StRS-018 N J belegt nein
69 SwRS-044 Lieferantenbeleg-Ablage SwRS M-031 SyRS-026 N J belegt nein
70 SwRS-045 Distributoren auto-anlegen SwRS M-032 SyRS-027 N J belegt nein
71 SwRS-046 Kalender-Einstellungen SwRS M-033 SyRS-029,StRS-018 N J belegt nein
72 SwRS-047 Icon-Verwaltung SwRS M-034 SyRS-031 N J belegt nein
73 SwRS-048 Nexus-Einstellungen SwRS M-035 SyRS-031 N J belegt nein
74 SwRS-049 Chat SwRS M-037 SyRS-029,StRS-017 N J belegt nein
75 SwRS-050 Checklisten SwRS M-038 SyRS-029 N J belegt nein
76 SwRS-051 Laender/Waehrungen SwRS M-040 SyRS-011,StRS-001 N J belegt nein
77 SwRS-052 CPra-Konnektor SwRS M-041 SyRS-027 N J belegt nein
78 SwRS-053 Custom Tables SwRS M-043 SyRS-023 N J belegt Kandidat:SwRS-029
79 SwRS-054 AccountDevices SwRS M-045 SyRS-028,StRS-022 N J belegt Kandidat:Assets
80 SwRS-055 AssetManagement DocuBoard SwRS M-046 SyRS-028,StRS-022 N J belegt Kandidat:SwRS-054
81 SwRS-056 Dokumentationen SwRS M-047 SyRS-026,StRS-020 N J belegt nein
82 SwRS-057 FiBu-Exportkonfigurationen SwRS M-044 SyRS-021 J J belegt nein
83 SwRS-058 Doppeluebergabeschutz FiBu SwRS M-044 SyRS-021 J J belegt nein
84 SyRS-025 Report-Engine Belegdruck SyRS M-080,M-081 StRS-015 N J belegt nein
85 SyRS-026 Dokumenten-/Verzeichnisverwaltung SyRS M-013 StRS-020 N J belegt nein
86 SyRS-027 EDI-Bestelluebertragung SyRS M-048 StRS-010,StRS-007,StRS-021 N J belegt Kandidat:Gateway-EDI
87 SyRS-028 Kundengeraete/Assets SyRS M-045,M-046,M-084 StRS-022,StRS-023 N J belegt Kandidat:3 Datenhaltungen
88 SyRS-029 Organisation+Zusammenarbeit SyRS M-033,M-066,M-067,M-107 StRS-018 N J belegt nein
89 SyRS-030 TAPI-Telefonie SyRS M-101,M-022 StRS-017 N J belegt nein
90 SyRS-031 Mehrkanal-Clients SyRS M-127,M-130,M-133 StRS-019 N J belegt Kandidat:Doppel-UI
91 SyRS-032 Onlinebanking-Zahlungsabgleich SyRS M-053 StRS-009 J J belegt nein
92 SyRS-033 Volltextsuche SyRS M-056 StRS-027 N J belegt nein
93 SyRS-034 Massenaenderungen SyRS M-063 StRS-008 N J belegt nein
94 SyRS-035 E-Mail/Exchange SyRS M-060 StRS-017,StRS-026 N J belegt nein
95 SyRS-036 Mail-Scanner SyRS M-061 StRS-017,StRS-005 N J belegt Kandidat:Workflows
96 SwRS-059 RMA-Abwicklung SwRS M-042 SyRS-028,StRS-023 N J belegt nein
97 SwRS-060 EDI-Bestellerzeugung SwRS M-048 SyRS-027 N J belegt nein
98 SwRS-061 Mitarbeiterstatus/Dispatcher SwRS M-049 SyRS-020,StRS-012 N J belegt nein
99 SwRS-062 ExpectedEvents SwRS M-050 SyRS-018,StRS-031 N J belegt nein
100 SwRS-063 Externe Helpdesk-Konfiguration SwRS M-051 SyRS-027,StRS-005 N J belegt Kandidat:DocBee
101 SwRS-064 Externe Tools SwRS M-052 SyRS-023 N J belegt nein
102 SwRS-065 Zahlungseingangsprotokoll SwRS M-053 SyRS-032 J J belegt nein
103 SwRS-066 Bankumsatz-Zuordnung/Buchung SwRS M-053 SyRS-032 J J belegt nein
104 SwRS-067 CustomGateway Sonderartikel SwRS M-054 SyRS-027,StRS-004 N J belegt nein
105 SwRS-068 Lucene-Index inkrementell SwRS M-056 SyRS-033 N J belegt nein
106 SwRS-069 Shop-Integration ExternalId SwRS M-057 SyRS-027,StRS-019 N J belegt nein
107 SwRS-070 ItPlanner Kategorien SwRS M-058 SyRS-029 N J belegt nein
108 SwRS-071 Lagerorte+Umbuchungslog SwRS M-059 SyRS-013,StRS-008 N J belegt nein
109 SwRS-072 Signaturen+Blacklist SwRS M-060 SyRS-035 N J belegt nein
110 SwRS-073 MailScanner-Konfiguration SwRS M-061 SyRS-036 N J belegt nein
111 SwRS-074 Serien-Mailings SwRS M-062 SyRS-035,StRS-026 N J belegt nein
112 SwRS-075 Massenpreisaenderungen SwRS M-063 SyRS-034 N J belegt nein
113 SwRS-076 Mobile Mitarbeiterliste SwRS M-064 SyRS-031 N J belegt nein
114 SwRS-077 Modulkatalog+Favoriten SwRS M-065 SyRS-031,StRS-014 N J belegt nein
115 SwRS-078 Dashboards SwRS M-066 SyRS-029 N J belegt nein
116 SwRS-079 MyDay Arbeitsvorrat SwRS M-067 SyRS-029 N J belegt nein
117 SwRS-080 Nexus-Benachrichtigungen SwRS M-068 SyRS-031,StRS-018 N J belegt Kandidat:M-070
118 SwRS-081 Ticket-Ansichten Nexus SwRS M-069 SyRS-031,StRS-005 N J belegt nein
119 SwRS-082 Objekt-Benachrichtigungsempfaenger SwRS M-070 SyRS-029 N J belegt Kandidat:SwRS-080
120 SwRS-083 Externe Objektreferenzen SwRS M-071 SyRS-027 N J belegt nein
121 SwRS-084 Outlook-Assetsuche SwRS M-072 SyRS-031,StRS-022 N J belegt nein
122 SwRS-085 Kundenzugangsdaten+Logs SwRS M-073 SyRS-017,StRS-028 J J belegt Kandidat:M-074
123 SwRS-086 Passwortmanager Siegel SwRS M-074 SyRS-017,StRS-028 J J belegt Kandidat:SwRS-085
124 SwRS-087 Prozesse Schritte/Bindungen SwRS M-075 SyRS-036,StRS-031 N J belegt Kandidat:Workflows
125 SwRS-088 Produktmatrix SwRS M-076 SyRS-020,StRS-025 N J belegt nein
126 SwRS-089 Fertigungsauftraege SwRS M-077 SyRS-013,StRS-024 N J belegt nein
127 SwRS-090 Projektliste SwRS M-078 SyRS-020,StRS-025 N J belegt Kandidat:Projektbegriffe
128 SwRS-091 Bestellvorschlaege SwRS M-079 SyRS-027,StRS-007 N J belegt nein
129 SyRS-037 Vertragsverwaltung Laufzeit/Intervalle SyRS M-084 StRS-004 J J belegt nein
130 SyRS-038 Automatische Vertragsfakturierung SyRS M-084 StRS-004,StRS-003 J J belegt nein
131 SyRS-039 Timer-Billing SyRS M-084,M-086 StRS-006,StRS-005 J J belegt nein
132 SyRS-040 Helpdesk Rechte+Status SyRS M-086 StRS-005,StRS-012 J J belegt nein
133 SyRS-041 Ticket-Eskalation SyRS M-086 StRS-005 N J belegt nein
134 SyRS-042 Kassenbuch SyRS M-087 StRS-003,StRS-009 J J belegt nein
135 SwRS-092 Vertrags-Datumsarithmetik SwRS M-084 SyRS-037 J J belegt nein
136 SwRS-093 Auto-Vertragsschliessen SwRS M-084 SyRS-037,SyRS-038 J J belegt nein
137 SwRS-094 Abrechnungsfaellige Kunden+Zaehler SwRS M-084 SyRS-038 J J belegt nein
138 SwRS-095 Timer-Belegerzeugung SwRS M-084,M-086 SyRS-039 J J belegt nein
139 SwRS-096 Ticket-Rechtepruefung Save SwRS M-086 SyRS-040,SyRS-001 J J belegt nein
140 SwRS-097 Ticket-Sichtbarkeit restriktiv SwRS M-086 SyRS-040 J J belegt nein
141 SwRS-098 Eskalationslauf SwRS M-086 SyRS-041 N J belegt nein
142 SwRS-099 Ticketabschluss+Benachrichtigung SwRS M-086 SyRS-040,SyRS-025 N J belegt nein
143 SwRS-100 Kassenbuchbuchung SwRS M-087 SyRS-042 J J belegt nein
144 SwRS-101 Riverbird-Ticketvalidierung SwRS M-082 SyRS-017,SyRS-027 J J belegt nein
145 SwRS-102 Kundensuche Kompakt SwRS M-085 SyRS-020 N J belegt nein
146 SwRS-103 Telemarketing SwRS M-088 SyRS-020,StRS-026 N J belegt nein
147 SwRS-104 Terminverwaltung Schedule SwRS M-089 SyRS-029 N J belegt Kandidat:M-033
148 SwRS-105 Dokuwizard Infrastruktur SwRS M-090 SyRS-026,StRS-020 N J belegt Kandidat:M-047
149 SwRS-106 Stundenzuschlagssaetze SwRS M-091 SyRS-039 J J belegt nein
150 SwRS-107 PDF-Signatur SwRS M-092 SyRS-025,StRS-020 J J belegt nein
151 SwRS-108 SelfCare-Formulare SwRS M-093 SyRS-031,StRS-019 N J belegt Kandidat:WebHDQuestion
152 SwRS-109 Workflow-Prozesse SwRS M-094 SyRS-036,StRS-031 N J belegt Kandidat:SwRS-087
153 SwRS-110 Social-Media-Feed SwRS M-095 SyRS-029 N J belegt nein
154 SwRS-111 Start Mapping/Verbindung SwRS M-096 SyRS-010 N J belegt nein
155 SwRS-112 Inventur SwRS M-098 SyRS-013,StRS-008 J J belegt nein
156 SwRS-113 I3D-Systemtabelle SwRS M-099 SyRS-010 N J belegt nein
157 SwRS-114 Tags SwRS M-100 SyRS-040 N J belegt nein
158 SwRS-115 Anruferkennung SwRS M-101 SyRS-030 N J belegt nein
159 SwRS-116 TaskManager Handler SwRS M-102 SyRS-029,StRS-031 N J belegt Kandidat:M-107
160 SwRS-117 Telemetrie SwRS M-103 SyRS-023 N J belegt nein
161 SwRS-118 Textbausteine SwRS M-104 SyRS-025,SyRS-011 N J belegt nein
162 SwRS-119 Ticket-Projekte SwRS M-105 SyRS-040,StRS-025 N J belegt Kandidat:SwRS-090
163 SwRS-120 TimingSettings SwRS M-106 SyRS-018 N J belegt nein
164 SwRS-121 Objekt-ToDos SwRS M-107 SyRS-029 N J belegt Kandidat:SwRS-116
165 SwRS-122 Textformat-Konvertierung SwRS M-108 SyRS-023 N J belegt nein
166 SwRS-123 TradePool-Import SwRS M-109 SyRS-027 N J belegt nein
167 SwRS-124 Transaktionsobjekte SwRS M-110 SyRS-020 N J belegt nein
168 SwRS-125 SimpleUrls SwRS M-112 SyRS-026 N J belegt nein
169 SwRS-126 Videoportal-Zuordnung SwRS M-113 SyRS-023 N J belegt nein
170 SwRS-127 Gutscheinverwaltung SwRS M-114 SyRS-042 J J belegt nein
171 SwRS-128 Artikelstamm Systemartikel SwRS M-115 SyRS-013,StRS-008 N J belegt nein
172 SwRS-129 Aktions-Weblinks SwRS M-116 SyRS-031,StRS-019 N J belegt nein
173 SwRS-130 Webmenue-Konfiguration SwRS M-118 SyRS-031 N J belegt nein
174 SwRS-131 Webservice-Version SwRS M-119 SyRS-031 N J belegt nein
175 SwRS-132 PDF-Merge SwRS M-120 SyRS-025 N J belegt nein
176 SwRS-133 Typisierte Exceptions SwRS M-121 SyRS-003 N J belegt nein
177 SyRS-043 E-Rechnungsformate SyRS M-044,M-080,M-126,M-137 StRS-010,StRS-003 J J belegt nein
178 SyRS-044 Versanddienstleister SyRS M-138,M-139 StRS-011 N J belegt Kandidat:GLS-vs-Shipcloud
179 SyRS-045 Kundenportal Nexus SyRS M-130 StRS-019 N J belegt Kandidat:SelfCare
180 SyRS-046 REST-API Rechteautorisierung SyRS M-133 StRS-013,StRS-012 J J belegt nein
181 SyRS-047 Container-Betrieb SyRS M-148 StRS-031 N J belegt nein
182 SyRS-048 Windows-Installer SyRS M-147,M-149 StRS-031 N J belegt nein
183 SyRS-049 Testabdeckung SyRS M-151,M-148 StRS-031 N J belegt nein
184 SwRS-134 Grid-/UI-Profile SwRS M-055 SyRS-031 N J belegt nein
185 SwRS-135 Statistiken SwRS M-097 SyRS-021,SyRS-032,StRS-016 N J belegt nein
186 SwRS-136 Webservice-Fassaden SwRS M-117 SyRS-031,SyRS-046 N J belegt Kandidat:Doppel-BL
187 SwRS-137 DAO Event-Listener SwRS M-122 SyRS-010,SyRS-009 N J belegt nein
188 SwRS-138 Entitaetsmodell I3D SwRS M-123 SyRS-009,SyRS-010 N J belegt nein
189 SwRS-139 ModuleFeatures SwRS M-124 SyRS-003 N J belegt nein
190 SwRS-140 Objektartenkatalog SwRS M-125 SyRS-011 N J belegt nein
191 SwRS-141 Gateway-Formatadapter SwRS M-126 SyRS-027,SyRS-021,SyRS-043 N J belegt Kandidat:EDI-Doppel
192 SwRS-142 WPF-Client SwRS M-127 SyRS-031 N J belegt Kandidat:Nexus
193 SwRS-143 Controls-Bibliothek SwRS M-128 SyRS-031 N J belegt nein
194 SwRS-144 Core-Bibliothek TOTP SwRS M-129 SyRS-005 J J belegt nein
195 SwRS-145 Nexus-Webclient SwRS M-130,M-131,M-132 SyRS-031,SyRS-045 N J belegt Kandidat:SwRS-142
196 SwRS-146 Webservice-Hosting SwRS M-134,M-135,M-136 SyRS-047,SyRS-031 N J belegt nein
197 SwRS-147 Versionierte Controller SwRS M-133 SyRS-046,SyRS-031 J J belegt nein
198 SwRS-148 Distributor-Produktdaten SwRS M-140,M-141,M-143,M-144 SyRS-027,StRS-007 N J belegt nein
199 SwRS-149 finAPI-Client SwRS M-142 SyRS-032 J J belegt nein
200 SwRS-150 docuFORM-Anbindung SwRS M-145 SyRS-038,SyRS-027 N J belegt Kandidat:Assets
201 SwRS-151 GLS/Shipcloud Logik SwRS M-138,M-139 SyRS-044 N J belegt nein
202 SwRS-152 Legacy-DB-Schema Kunden SwRS M-146 SyRS-011,SyRS-020 N J belegt Kandidat:Bankdaten
203 SwRS-153 Release-Artefakte SwRS M-147,M-148,M-149 SyRS-047,SyRS-048,SyRS-049 N J belegt nein
204 SyRS-050 [HYPOTHESE] Mahnwesen SyRS M-026,M-053 StRS-009,StRS-003 J N HYPOTHESE nein
205 SwRS-154 [HYPOTHESE] Anzahlungsverrechnung SwRS M-083 SyRS-011,SyRS-014 J J HYPOTHESE nein
206 SwRS-155 [HYPOTHESE] SEPA-Lastschrift SwRS M-053,M-001 SyRS-032,SyRS-021 J J HYPOTHESE nein
207 SwRS-156 [HYPOTHESE] WebCart-Sonderpreise SwRS M-130,M-086 SyRS-045 N N HYPOTHESE nein
208 SwRS-157 [HYPOTHESE] Exchange-Sync SwRS M-060,M-033 SyRS-035,SyRS-029 N N HYPOTHESE Kandidat:SwRS-104
209 SwRS-158 [HYPOTHESE] Fernwartung Supremo SwRS M-067 SyRS-029,SyRS-030 N N HYPOTHESE nein
210 StRS-001 Geschaeftspartnerverwaltung StRS M-002 SyRS-020,SyRS-024 N J belegt nein
211 StRS-002 Angebots-/Auftragsabwicklung StRS M-083 SyRS-011,SyRS-015,SyRS-016 N J belegt nein
212 StRS-003 Geschuetzte Fakturierung StRS M-083,M-087 SyRS-012,SyRS-014,SyRS-042 J J belegt nein
213 StRS-004 Vertragsgeschaeft StRS M-084 SyRS-037,SyRS-038,SyRS-039 J J belegt nein
214 StRS-005 Helpdesk StRS M-086 SyRS-040,SyRS-041,SyRS-036 N J belegt nein
215 StRS-006 Leistungserfassung StRS M-084,M-086 SyRS-039 J J belegt nein
216 StRS-007 Einkauf+Distribution StRS M-079,M-048 SyRS-027 N J belegt nein
217 StRS-008 Artikel-/Lagerfuehrung StRS M-115,M-059,M-098 SyRS-013,SyRS-034 N J belegt nein
218 StRS-009 Finanzprozesse StRS M-053,M-044,M-087 SyRS-021,SyRS-032,SyRS-042,SyRS-050 J J belegt nein
219 StRS-010 E-Belegaustausch StRS M-044,M-048 SyRS-043,SyRS-027 J J belegt nein
220 StRS-011 Versandabwicklung StRS M-138,M-139 SyRS-044 N J belegt nein
221 StRS-012 Berechtigungssteuerung StRS M-024 SyRS-001,SyRS-002,SyRS-008 J J belegt nein
222 StRS-013 Sichere Anmeldung/API StRS M-017,M-003 SyRS-003,SyRS-004,SyRS-005,SyRS-017,SyRS-046 J J belegt nein
223 StRS-014 Lizenz-/Modulsteuerung StRS M-016,M-065 SyRS-003 J J belegt nein
224 StRS-015 Belegdruck/Berichte StRS M-080 SyRS-025 N J belegt nein
225 StRS-016 BW-Transparenz StRS M-097 SyRS-021 N J belegt nein
226 StRS-017 Integrierte Kommunikation StRS M-060,M-101,M-037 SyRS-035,SyRS-036,SyRS-030 N J belegt nein
227 StRS-018 Arbeitsorganisation StRS M-067,M-066 SyRS-029 N J belegt nein
228 StRS-019 Endkunden-Self-Service StRS M-130,M-093 SyRS-045,SyRS-002 N J belegt nein
229 StRS-020 Dokumente+Signatur StRS M-013,M-092 SyRS-026,SyRS-022 N J belegt nein
230 StRS-021 Konnektoren-Offenheit StRS M-071,M-044 SyRS-027 N J belegt nein
231 StRS-022 Kundengeraete-Ueberblick StRS M-045,M-046,M-084 SyRS-028 N J belegt Kandidat:Asset-Konzept
232 StRS-023 RMA StRS M-042 SyRS-028 N J belegt nein
233 StRS-024 Fertigung StRS M-077 SyRS-013 N J belegt nein
234 StRS-025 CRM/Projekte StRS M-078,M-076,M-105 SyRS-020 N J belegt Kandidat:Projektbegriffe
235 StRS-026 Marketing StRS M-062,M-088 SyRS-035 N J belegt nein
236 StRS-027 Zentrale Suche StRS M-056 SyRS-033 N J belegt nein
237 StRS-028 Kundenzugangsdaten StRS M-073,M-074 SyRS-017 J J belegt Kandidat:2 Passwortmodule
238 StRS-029 KI-Unterstuetzung StRS M-030,M-005 SyRS-019 N J belegt nein
239 StRS-030 DSGVO+Audit StRS M-012,M-036 SyRS-022,SyRS-009,SyRS-010 J J belegt nein
240 StRS-031 Automatisierter Betrieb StRS M-006,M-148,M-147,M-151 SyRS-018,SyRS-047,SyRS-048,SyRS-049 N J belegt nein
241 StRS-032 Anpassbarkeit StRS M-026,M-011,M-043 SyRS-023 N J belegt nein
242 StRS-033 Mehrfirmen-/Filialbetrieb StRS M-009,M-018 SyRS-024,SyRS-012 N J belegt nein
@@ -0,0 +1,69 @@
## 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 |
|---|---:|---:|
| StRS | 33 | 13,7 % |
| SyRS | 50 | 20,7 % |
| SwRS | 158 | 65,6 % |
| **Gesamt** | **241** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 133 | 55,2 % |
| Sicherheit | 32 | 13,3 % |
| Schnittstelle | 25 | 10,4 % |
| funktional (Abrechnung) | 19 | 7,9 % |
| nicht-funktional | 16 | 6,6 % |
| Daten | 12 | 5,0 % |
| Schnittstelle (Abrechnung) | 2 | 0,8 % |
| funktional (Abrechnung/Fakturierung) | 1 | 0,4 % |
| Sicherheit (Abrechnung) | 1 | 0,4 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 283 |
| davon `PRIMÄR` | 252 (89,0 %) |
| davon `SEKUNDÄR` | 18 (6,4 %) |
| davon `KONTEXT` | 13 (4,6 %) |
| Belege je Anforderung (Median) | 1 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 237 (98,3 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 218 | 90,5 % |
| workaround | 9 | 3,7 % |
| sonderfall | 7 | 2,9 % |
| veraltet | 7 | 2,9 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 235 | 97,5 % |
| als `HYPOTHESE` gekennzeichnet | 6 | 2,5 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 41 | 17,0 % |
| mit ISO-25010-Qualitätsmerkmal | 16 | 6,6 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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** (74 risikorelevante Anforderungen, alle gedeckt) |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 241 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 241 von 241 mit Tracelinks (100,0 %) |
@@ -0,0 +1,177 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien sowie das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis.
Nicht verfügbar sind: Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-fable-5\solo\high\02_Lauf_2026-08-27_002430_v7.0.0-35a4\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1 @@
2026-08-27T07:28:28.0825221+02:00
@@ -0,0 +1,150 @@
M-001 2
M-002 3
M-003 3
M-004 1
M-005 3
M-006 3
M-007 1
M-008 1
M-009 3
M-010 1
M-011 2
M-012 3
M-013 3
M-014 1
M-015 1
M-016 3
M-017 9
M-018 4
M-019 1
M-020 1
M-021 1
M-022 2
M-023 1
M-024 7
M-025 1
M-026 4
M-027 1
M-028 1
M-029 1
M-030 2
M-031 1
M-032 1
M-033 3
M-034 1
M-035 1
M-036 3
M-037 2
M-038 1
M-039 4
M-040 1
M-041 1
M-042 2
M-043 2
M-044 7
M-045 3
M-046 3
M-047 1
M-048 4
M-049 1
M-050 1
M-051 1
M-052 1
M-053 6
M-054 1
M-055 1
M-056 3
M-057 1
M-058 1
M-059 2
M-060 4
M-061 2
M-062 2
M-063 2
M-064 1
M-065 2
M-066 3
M-067 4
M-068 1
M-069 1
M-070 1
M-071 2
M-072 1
M-073 2
M-074 2
M-075 1
M-076 2
M-077 2
M-078 2
M-079 2
M-080 3
M-081 1
M-082 1
M-083 16
M-084 11
M-085 1
M-086 11
M-087 4
M-088 2
M-089 1
M-090 1
M-091 1
M-092 2
M-093 2
M-094 1
M-095 1
M-096 1
M-097 2
M-098 2
M-099 1
M-100 1
M-101 3
M-102 1
M-103 1
M-104 1
M-105 2
M-106 1
M-107 2
M-108 1
M-109 1
M-110 1
M-111 1
M-112 1
M-113 1
M-114 1
M-115 4
M-116 1
M-117 1
M-118 1
M-119 1
M-120 1
M-121 1
M-122 1
M-123 1
M-124 1
M-125 1
M-126 2
M-127 2
M-128 1
M-129 1
M-130 5
M-131 1
M-132 1
M-133 3
M-134 1
M-135 1
M-136 1
M-137 1
M-138 3
M-139 3
M-140 1
M-141 1
M-142 1
M-143 1
M-144 1
M-145 1
M-146 1
M-147 3
M-148 4
M-149 2
M-151 2
@@ -0,0 +1,192 @@
## Abdeckungstabelle (je Modul des Inventars)
Einstufung: `tief` = mehrere Anforderungen inkl. gelesener Kernlogik der risikorelevanten Pfade; `mittel` = 2-3 Anforderungen auf Basis gelesener Kernmethoden; `flach` = 1-2 Anforderungen auf Basis von Methodensignaturen/ausgewählten Codeausschnitten; `nicht analysiert` = keine Anforderung (mit Begründung).
| Modul | Bezeichnung | Einstufung | Anzahl Anforderungen | Anforderungen |
|---|---|---|---|---|
| M-001 | Accounting (Bankkonten) | mittel | 2 | SwRS-019, SwRS-155 |
| M-002 | Accounts (Konten-/Adressstamm) | mittel | 3 | SwRS-020, SyRS-020, StRS-001 |
| M-003 | Administration: AccessTokens | mittel | 3 | SyRS-017, SwRS-021, StRS-013 |
| M-004 | Administration: Applications | flach | 1 | SwRS-022 |
| M-005 | Administration: ArtificialIntelligence | mittel | 3 | SyRS-019, SwRS-023, StRS-029 |
| M-006 | Administration: BackgroundServices | mittel | 3 | SyRS-018, SwRS-024, StRS-031 |
| M-007 | Administration: BookKeepingAccountSystems | flach | 1 | SwRS-025 |
| M-008 | Administration: CentronConfigDb | flach | 1 | SwRS-026 |
| M-009 | Administration: Company/CompanyInformations | mittel | 3 | SyRS-024, SwRS-027, StRS-033 |
| M-010 | Administration: Connections | flach | 1 | SwRS-028 |
| M-011 | Administration: Customization | mittel | 2 | SwRS-029, StRS-032 |
| M-012 | Administration: DataSecurity | mittel | 3 | SyRS-022, SwRS-030, StRS-030 |
| M-013 | Administration: Documents/FileManagement | mittel | 3 | SwRS-031, SyRS-026, StRS-020 |
| M-014 | Administration: Employees | flach | 1 | SwRS-032 |
| M-015 | Administration: Environments | flach | 1 | SwRS-033 |
| M-016 | Administration: Licensing | tief | 3 | SyRS-003, SwRS-009, StRS-014 |
| M-017 | Administration: Logins/Auth | tief | 9 | SyRS-003, SyRS-004, SyRS-005, SyRS-006, SyRS-007, SwRS-002, SwRS-003, SwRS-005, StRS-013 |
| M-018 | Administration: Mandatory | mittel | 4 | SyRS-012, SwRS-012, SyRS-024, StRS-033 |
| M-019 | Administration: Masterdata | flach | 1 | SwRS-034 |
| M-020 | Administration: NetworkDiagnostics | flach | 1 | SwRS-035 |
| M-021 | Administration: PerformanceTests/Profiling | flach | 1 | SwRS-036 |
| M-022 | Administration: PhoneSettings | mittel | 2 | SwRS-037, SyRS-030 |
| M-023 | Administration: Portal | flach | 1 | SwRS-038 |
| M-024 | Administration: Rights | tief | 7 | SyRS-001, SyRS-002, SyRS-008, SwRS-001, SwRS-004, SwRS-008, StRS-012 |
| M-025 | Administration: Scripts/SQLManagement | flach | 1 | SwRS-039 |
| M-026 | Administration: Settings | mittel | 4 | SyRS-023, SwRS-040, SyRS-050, StRS-032 |
| M-027 | Administration: Themes | flach | 1 | SwRS-041 |
| M-028 | Administration: WebServiceConfiguration | flach | 1 | SwRS-042 |
| M-029 | AppointmentRequests | flach | 1 | SwRS-043 |
| M-030 | ArtificialIntelligence | mittel | 2 | SyRS-019, StRS-029 |
| M-031 | BusinessPartner | flach | 1 | SwRS-044 |
| M-032 | Buying | flach | 1 | SwRS-045 |
| M-033 | Calendar | mittel | 3 | SwRS-046, SyRS-029, SwRS-157 |
| M-034 | CentronIcons | flach | 1 | SwRS-047 |
| M-035 | CentronNexus (BL) | flach | 1 | SwRS-048 |
| M-036 | ChangeTracking | mittel | 3 | SyRS-009, SwRS-007, StRS-030 |
| M-037 | Chats | mittel | 2 | SwRS-049, StRS-017 |
| M-038 | CheckListArea | flach | 1 | SwRS-050 |
| M-039 | Core (BL-Kern) | mittel | 4 | SyRS-009, SyRS-010, SwRS-006, SwRS-007 |
| M-040 | CountryArea | flach | 1 | SwRS-051 |
| M-041 | CPra | flach | 1 | SwRS-052 |
| M-042 | CustomerArea | mittel | 2 | SwRS-059, StRS-023 |
| M-043 | Customizations (CustomTables) | mittel | 2 | SwRS-053, StRS-032 |
| M-044 | DataExchange | tief | 7 | SyRS-021, SwRS-057, SwRS-058, SyRS-043, StRS-009, StRS-010, StRS-021 |
| M-045 | Devices | mittel | 3 | SwRS-054, SyRS-028, StRS-022 |
| M-046 | DocuBoard | mittel | 3 | SwRS-055, SyRS-028, StRS-022 |
| M-047 | DocumentationArea | flach | 1 | SwRS-056 |
| M-048 | EDI | mittel | 4 | SyRS-027, SwRS-060, StRS-007, StRS-010 |
| M-049 | EmployeeArea | flach | 1 | SwRS-061 |
| M-050 | ExpectedEvents | flach | 1 | SwRS-062 |
| M-051 | ExternalHelpdesk | flach | 1 | SwRS-063 |
| M-052 | ExternalToolsBL | flach | 1 | SwRS-064 |
| M-053 | Finances | tief | 6 | SyRS-032, SwRS-065, SwRS-066, SyRS-050, SwRS-155, StRS-009 |
| M-054 | Gateway (BL) | flach | 1 | SwRS-067 |
| M-055 | GUI (BL-Anteil) | flach | 1 | SwRS-134 |
| M-056 | IndexSearch | mittel | 3 | SyRS-033, SwRS-068, StRS-027 |
| M-057 | Integrations | flach | 1 | SwRS-069 |
| M-058 | ItPlanner | flach | 1 | SwRS-070 |
| M-059 | Logistics | mittel | 2 | SwRS-071, StRS-008 |
| M-060 | Mail | mittel | 4 | SyRS-035, SwRS-072, SwRS-157, StRS-017 |
| M-061 | MailScanner | mittel | 2 | SyRS-036, SwRS-073 |
| M-062 | Mailings | mittel | 2 | SwRS-074, StRS-026 |
| M-063 | MassUpdate | mittel | 2 | SyRS-034, SwRS-075 |
| M-064 | Mobile | flach | 1 | SwRS-076 |
| M-065 | Modules | mittel | 2 | SwRS-077, StRS-014 |
| M-066 | MyCentron | mittel | 3 | SyRS-029, SwRS-078, StRS-018 |
| M-067 | MyDay | mittel | 4 | SyRS-029, SwRS-079, SwRS-158, StRS-018 |
| M-068 | NexusNotifications | flach | 1 | SwRS-080 |
| M-069 | NexusTicketViews | flach | 1 | SwRS-081 |
| M-070 | Notifications | flach | 1 | SwRS-082 |
| M-071 | ObjectExternalReferences | mittel | 2 | SwRS-083, StRS-021 |
| M-072 | Outlook | flach | 1 | SwRS-084 |
| M-073 | PasswordManagementArea | mittel | 2 | SwRS-085, StRS-028 |
| M-074 | PasswordManager | mittel | 2 | SwRS-086, StRS-028 |
| M-075 | Processes | flach | 1 | SwRS-087 |
| M-076 | ProductMatrix | mittel | 2 | SwRS-088, StRS-025 |
| M-077 | Production | mittel | 2 | SwRS-089, StRS-024 |
| M-078 | Projects | mittel | 2 | SwRS-090, StRS-025 |
| M-079 | Purchasing | mittel | 2 | SwRS-091, StRS-007 |
| M-080 | ReportEngine | mittel | 3 | SyRS-025, SyRS-043, StRS-015 |
| M-081 | Reporting | flach | 1 | SyRS-025 |
| M-082 | RiverDivo | flach | 1 | SwRS-101 |
| M-083 | Sales: Receipts (Belegwesen) | tief | 16 | SyRS-011, SyRS-012, SyRS-013, SyRS-014, SyRS-015, SyRS-016, SwRS-010, SwRS-013, SwRS-014, SwRS-015, SwRS-016, SwRS-017, SwRS-018, SwRS-154, StRS-002, StRS-003 |
| M-084 | Sales: CustomerAssets (Verträge) | tief | 11 | SyRS-028, SyRS-037, SyRS-038, SyRS-039, SwRS-092, SwRS-093, SwRS-094, SwRS-095, StRS-004, StRS-006, StRS-022 |
| M-085 | Sales: Customers (CRM) | flach | 1 | SwRS-102 |
| M-086 | Sales: Support (Helpdesk) | tief | 11 | SyRS-039, SyRS-040, SyRS-041, SwRS-095, SwRS-096, SwRS-097, SwRS-098, SwRS-099, SwRS-156, StRS-005, StRS-006 |
| M-087 | Sales: CashBooks | tief | 4 | SyRS-042, SwRS-100, StRS-003, StRS-009 |
| M-088 | Sales: Marketing | mittel | 2 | SwRS-103, StRS-026 |
| M-089 | Sales: Calendar | flach | 1 | SwRS-104 |
| M-090 | Sales: DocumentationWizardArea | flach | 1 | SwRS-105 |
| M-091 | Sales: HourlySurchargeRatesBL | flach | 1 | SwRS-106 |
| M-092 | Security (PdfSigning) | mittel | 2 | SwRS-107, StRS-020 |
| M-093 | SelfCare | mittel | 2 | SwRS-108, StRS-019 |
| M-094 | Services | flach | 1 | SwRS-109 |
| M-095 | SocialMedia | flach | 1 | SwRS-110 |
| M-096 | Start | flach | 1 | SwRS-111 |
| M-097 | Statistics | mittel | 2 | SwRS-135, StRS-016 |
| M-098 | Storage | mittel | 2 | SwRS-112, StRS-008 |
| M-099 | SystemArea | flach | 1 | SwRS-113 |
| M-100 | Tags | flach | 1 | SwRS-114 |
| M-101 | Tapi | mittel | 3 | SyRS-030, SwRS-115, StRS-017 |
| M-102 | TaskManager | flach | 1 | SwRS-116 |
| M-103 | Telemetry | flach | 1 | SwRS-117 |
| M-104 | TextModuleArea | flach | 1 | SwRS-118 |
| M-105 | TicketProjects | mittel | 2 | SwRS-119, StRS-025 |
| M-106 | Time | flach | 1 | SwRS-120 |
| M-107 | ToDoArea | mittel | 2 | SyRS-029, SwRS-121 |
| M-108 | Tools | flach | 1 | SwRS-122 |
| M-109 | TradePool | flach | 1 | SwRS-123 |
| M-110 | Transactions | flach | 1 | SwRS-124 |
| M-111 | TwoFactorAuthenticator | flach | 1 | SwRS-011 |
| M-112 | Urls | flach | 1 | SwRS-125 |
| M-113 | VideoPortal | flach | 1 | SwRS-126 |
| M-114 | VoucherManagement | flach | 1 | SwRS-127 |
| M-115 | Warehousing | mittel | 4 | SyRS-013, SwRS-014, SwRS-128, StRS-008 |
| M-116 | WebLinks | flach | 1 | SwRS-129 |
| M-117 | WebServices (BL) | flach | 1 | SwRS-136 |
| M-118 | WebSuite | flach | 1 | SwRS-130 |
| M-119 | WebVersion | flach | 1 | SwRS-131 |
| M-120 | Helpers (BL) | flach | 1 | SwRS-132 |
| M-121 | Exceptions (BL) | flach | 1 | SwRS-133 |
| M-122 | Centron.DAO (Persistenz) | flach | 1 | SwRS-137 |
| M-123 | Centron.Entities | flach | 1 | SwRS-138 |
| M-124 | Centron.Common | flach | 1 | SwRS-139 |
| M-125 | Centron.Interfaces | flach | 1 | SwRS-140 |
| M-126 | Centron.Gateway | mittel | 2 | SyRS-043, SwRS-141 |
| M-127 | Centron.WPF.UI (+ Extension) | mittel | 2 | SyRS-031, SwRS-142 |
| M-128 | Centron.Controls (+ Preview) | flach | 1 | SwRS-143 |
| M-129 | Centron.Core (shared) | flach | 1 | SwRS-144 |
| M-130 | CentronNexus (Blazor-Web) | mittel | 5 | SyRS-031, SyRS-045, SwRS-145, SwRS-156, StRS-019 |
| M-131 | CentronNexus.Host | flach | 1 | SwRS-145 |
| M-132 | CentronNexus.OutlookAddIn | flach | 1 | SwRS-145 |
| M-133 | Centron.Controllers (REST-API) | mittel | 3 | SyRS-031, SyRS-046, SwRS-147 |
| M-134 | Centron.WebServices.Core | flach | 1 | SwRS-146 |
| M-135 | Centron.Host (+ Console/WindowsService) | flach | 1 | SwRS-146 |
| M-136 | ConnectionManager | flach | 1 | SwRS-146 |
| M-137 | Centron.Api.EbInterface | flach | 1 | SyRS-043 |
| M-138 | Centron.Api.Gls | mittel | 3 | SyRS-044, SwRS-151, StRS-011 |
| M-139 | Centron.Api.Shipcloud | mittel | 3 | SyRS-044, SwRS-151, StRS-011 |
| M-140 | Centron.APIs.CopDataAccess | flach | 1 | SwRS-148 |
| M-141 | Centron.APIs.EgisDataAccess | flach | 1 | SwRS-148 |
| M-142 | Centron.APIs.FinAPI | flach | 1 | SwRS-149 |
| M-143 | Centron.APIs.IcecatDataAccess | flach | 1 | SwRS-148 |
| M-144 | Centron.APIs.ITscopeDataAccess | flach | 1 | SwRS-148 |
| M-145 | Centron.Api.docuFORM | flach | 1 | SwRS-150 |
| M-146 | Datenbankschema | flach | 1 | SwRS-152 |
| M-147 | Deployment/Installer | mittel | 3 | SyRS-048, SwRS-153, StRS-031 |
| M-148 | Docker/Betrieb | mittel | 4 | SyRS-047, SyRS-049, SwRS-153, StRS-031 |
| M-149 | Scripts | mittel | 2 | SyRS-048, SwRS-153 |
| M-150 | Dokumentation | nicht analysiert | 0 | – (reine Entwickler-/Betriebsdokumentation ohne eigene Systemfunktion; als KONTEXT-Belegquelle genutzt, z. B. für SyRS-043, SwRS-157) |
| M-151 | Tests | mittel | 2 | SyRS-049, StRS-031 |
**Summen:** tief: 9 Module, mittel: 58, flach: 83, nicht analysiert: 1 (gesamt 151 Module).
## Konsistenzcheck
Automatisiert über alle drei Spezifikationsdateien ausgeführt (241 Anforderungsblöcke):
| Prüfung | Ergebnis |
|---|---|
| Doppelte oder mehrfach vergebene IDs | keine (241 eindeutige IDs: 33 StRS, 50 SyRS, 158 SwRS) |
| Anforderungen ohne Beleg | keine (jeder Block enthält mind. einen klassifizierten Beleg) |
| Anforderungen ohne Übernahmewürdigkeit | keine |
| Anforderungen ohne Prüfidee | keine |
| Tracelinks auf nicht existierende IDs | keine |
| SwRS ohne SyRS-Referenz / SyRS ohne StRS-Referenz | keine (siehe Traceability.md) |
| Abgleich Hypothesen.md ↔ Inline-Markierungen | deckungsgleich: SyRS-050, SwRS-154, SwRS-155, SwRS-156, SwRS-157, SwRS-158 (6 Stück) |
| Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk | keine gefundenen; erkannte fachliche Doppelimplementierungen sind als Konsolidierungskandidaten markiert (siehe Liste unten) |
**Wesentliche Konsolidierungskandidaten (fachlich gleiche Konzepte in getrennten Implementierungen):**
1. Gerätedatenhaltungen: AccountDevices (M-045) vs. CustomerAssets/„Stammblätter" (M-084) vs. DocuBoard-Assetmanagement (M-046) → ein Asset-Konzept (SyRS-028, StRS-022).
2. Zwei Belegmodelle: Sales/Receipts (neu) vs. Sales/CustomerAssets (alt) für dieselben Belegarten (SyRS-011).
3. Zwei Rechtemodelle: interne Rechte (Sichtrus/Sichmemb) vs. WebAccountsRights (SyRS-001/SyRS-002).
4. Drei 2FA-Wege: RADIUS, E-Mail-Link, TOTP (SyRS-005, SwRS-011).
5. Zwei Passwortverwaltungen: PasswordManagementArea vs. PasswordManager (SwRS-085/SwRS-086).
6. Zwei Workflow-/Prozess-Engines: Processes vs. Services/Workflows (SwRS-087/SwRS-109); zusätzlich MailScanner-Workflows (SyRS-036).
7. Zwei Customizing-Mechanismen: Custom Properties vs. Custom Tables (SwRS-029/SwRS-053).
8. Drei Projektbegriffe: Projects, CrmProjects, TicketProjects (SwRS-090/SwRS-119, StRS-025).
9. Zwei Aufgabenkonzepte: ToDoArea vs. TaskManager (SwRS-116/SwRS-121).
10. Zwei Benachrichtigungssysteme: Notifications vs. NexusNotifications (SwRS-080/SwRS-082).
11. EDI-Logik doppelt: Centron.BL/EDI vs. Centron.Gateway/EDI_* (SyRS-027/SwRS-141).
12. Bankverbindungen doppelt: Felder in Tabelle Kunden vs. BankAccount-Objekte (SwRS-152/SwRS-019).
13. Zwei Endkunden-Formularwege: SelfCare vs. Nexus-Kundenportal-Formulare (SwRS-108/SyRS-045).
14. Versandwege GLS-direkt vs. Shipcloud (SyRS-044).
15. Desktop-Client (WPF) vs. Nexus-Web-UI für dieselben Prozesse (SyRS-031, SwRS-142/SwRS-145).
@@ -0,0 +1,83 @@
## Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen)
75 Anforderungen sind risikorelevant. Belegsituation:
| ID | Titel | PRIMÄR-Beleg vorhanden | Status |
|---|---|---|---|
| SyRS-001 | Gruppenbasierte Benutzerrechtepruefung | ja | belegt |
| SyRS-002 | Getrenntes Rechtemodell fuer Web-Accounts | ja | belegt |
| SyRS-003 | Ticketbasierte Sitzungen mit Lizenzpruefung | ja | belegt |
| SyRS-004 | Mehrere Authentifizierungsverfahren | ja | belegt |
| SyRS-005 | Zwei-Faktor-Authentifizierung | ja | belegt |
| SyRS-006 | Zeitgesteuerte Kontodeaktivierung | ja | belegt |
| SyRS-007 | Anwendungsbezogene Anmelderechte | ja | belegt |
| SyRS-008 | Standard-Rechtegruppen | ja | belegt |
| SwRS-001 | Rechteermittlung SQL+Cache | ja | belegt |
| SwRS-002 | Passwort SHA1 ungesalzen | ja | belegt |
| SwRS-003 | 2FA-Validatorwahl | ja | belegt |
| SwRS-004 | Rechtegruppenverwaltung | ja | belegt |
| SwRS-005 | Ticket-Wiederverwendung+LoginIP | ja | belegt |
| SwRS-008 | Standardrechtegruppen aus Ressource | ja | belegt |
| SwRS-009 | Signaturvalidierte Lizenzdatei | ja | belegt |
| SyRS-011 | Belegkette Weiterfuehrungswege | ja | belegt |
| SyRS-012 | Nummernkreise je Mandant/Filiale | ja | belegt |
| SyRS-013 | Bestandswirkung der Belege | ja | belegt |
| SyRS-014 | Mindestpreisschutz | ja | belegt |
| SwRS-010 | Belegnummernvergabe+Templatekunde | ja | belegt |
| SwRS-011 | TOTP-Zweitfaktor | ja | belegt |
| SwRS-012 | Nummernkreis-Kaskade | ja | belegt |
| SwRS-014 | Negativbuchung nur mit Recht | ja | belegt |
| SwRS-015 | Mindestpreis-Reauth | ja | belegt |
| SyRS-017 | API-Zugriffstokens | ja | belegt |
| SwRS-019 | Bankverbindungen Rechte+Default | ja | belegt |
| SwRS-020 | Kontenstamm Rechte+FiBu-Nummer | ja | belegt |
| SwRS-021 | API-Token Hash+Ablauf+Log | ja | belegt |
| SwRS-026 | Konfig-DB Masterkey | ja | belegt |
| SyRS-022 | DSGVO Loeschkonzept | ja | belegt |
| SwRS-027 | Kollisionssichere Nummernvergabe | ja | belegt |
| SwRS-030 | DSGVO-Kontaktloeschung | ja | belegt |
| SyRS-021 | FiBu-Uebergabe DATEV | ja | belegt |
| SwRS-057 | FiBu-Exportkonfigurationen | ja | belegt |
| SwRS-058 | Doppeluebergabeschutz FiBu | ja | belegt |
| SyRS-032 | Onlinebanking-Zahlungsabgleich | ja | belegt |
| SwRS-065 | Zahlungseingangsprotokoll | ja | belegt |
| SwRS-066 | Bankumsatz-Zuordnung/Buchung | ja | belegt |
| SwRS-085 | Kundenzugangsdaten+Logs | ja | belegt |
| SwRS-086 | Passwortmanager Siegel | ja | belegt |
| SyRS-037 | Vertragsverwaltung Laufzeit/Intervalle | ja | belegt |
| SyRS-038 | Automatische Vertragsfakturierung | ja | belegt |
| SyRS-039 | Timer-Billing | ja | belegt |
| SyRS-040 | Helpdesk Rechte+Status | ja | belegt |
| SyRS-042 | Kassenbuch | ja | belegt |
| SwRS-092 | Vertrags-Datumsarithmetik | ja | belegt |
| SwRS-093 | Auto-Vertragsschliessen | ja | belegt |
| SwRS-094 | Abrechnungsfaellige Kunden+Zaehler | ja | belegt |
| SwRS-095 | Timer-Belegerzeugung | ja | belegt |
| SwRS-096 | Ticket-Rechtepruefung Save | ja | belegt |
| SwRS-097 | Ticket-Sichtbarkeit restriktiv | ja | belegt |
| SwRS-100 | Kassenbuchbuchung | ja | belegt |
| SwRS-101 | Riverbird-Ticketvalidierung | ja | belegt |
| SwRS-106 | Stundenzuschlagssaetze | ja | belegt |
| SwRS-107 | PDF-Signatur | ja | belegt |
| SwRS-112 | Inventur | ja | belegt |
| SwRS-127 | Gutscheinverwaltung | ja | belegt |
| SyRS-043 | E-Rechnungsformate | ja | belegt |
| SyRS-046 | REST-API Rechteautorisierung | ja | belegt |
| SwRS-144 | Core-Bibliothek TOTP | ja | belegt |
| SwRS-147 | Versionierte Controller | ja | belegt |
| SwRS-149 | finAPI-Client | ja | belegt |
| SyRS-050 | [HYPOTHESE] Mahnwesen | nein | HYPOTHESE |
| SwRS-154 | [HYPOTHESE] Anzahlungsverrechnung | ja | HYPOTHESE |
| SwRS-155 | [HYPOTHESE] SEPA-Lastschrift | ja | HYPOTHESE |
| StRS-003 | Geschuetzte Fakturierung | ja | belegt |
| StRS-004 | Vertragsgeschaeft | ja | belegt |
| StRS-006 | Leistungserfassung | ja | belegt |
| StRS-009 | Finanzprozesse | ja | belegt |
| StRS-010 | E-Belegaustausch | ja | belegt |
| StRS-012 | Berechtigungssteuerung | ja | belegt |
| StRS-013 | Sichere Anmeldung/API | ja | belegt |
| StRS-014 | Lizenz-/Modulsteuerung | ja | belegt |
| StRS-028 | Kundenzugangsdaten | ja | belegt |
| StRS-030 | DSGVO+Audit | ja | belegt |
**Regelprüfung:** Alle risikorelevanten Anforderungen besitzen entweder einen PRIMÄR-Beleg mit benannter durchsetzender Stelle oder sind als `[HYPOTHESE]` gekennzeichnet (betrifft SyRS-050 Mahnwesen). Kein Verstoß gegen die risikobasierte Priorisierung.
@@ -1,67 +1,39 @@
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Iteration 02
# Messprotokoll – Versuch 01 (V1b Baseline mit werkzeugeigenen Agenten) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf meldet `is_error: false` und `subtype: success`, hat aber **null Ergebnisdateien** erzeugt. Der Headless-Modus brach nach 600 Sekunden ab, während zehn Hintergrund-Subagenten noch arbeiteten. Verbraucht wurden dabei **193.399.648 Tokens**. Der Lauf ist für jede inhaltliche Auswertung unbrauchbar; sein Verbrauch ist real und wird ausgewiesen.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Iteration:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
vorhandene Iterationsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T16:00:49.2361402+02:00
- **Endzeit:** 2026-08-26T16:21:48.6873493+02:00
- **Dauer gesamt:** 0:20:59 (`duration_ms` 0:10:57; API: 3:49:48)
— **im Parallelbetrieb erhoben, nicht für Laufzeitvergleiche verwendbar**
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP` (24.662 versionierte Dateien)
- **Codebasis-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja (Prüfmuster ohne Treffer);
die Codebasis ist seit Commit `f045b99a` kein eigenes Repository mehr, sondern Teil des
Arbeitsrepos – der Vorher/Nachher-Vergleich läuft deshalb pfadskopiert
- **Snapshot-Zusatzartefakte:** keine – der Snapshot entspricht dem Commit-Stand
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
- **Startzeit:** 2026-08-26T16:00:44.0+02:00
- **Endzeit:** 2026-08-26T16:21:43.0+02:00
- **Dauer gesamt:** 00:20:59 — im Parallelbetrieb erhoben, nicht für Laufzeitvergleiche verwendbar
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
(SHA-256 `ED7F21250E868577572B4CADA53C132F7433C74270BF9B59E817CCEC6B1FA8DB`)
## Werkzeugkonfiguration
- **Skill-Version:** 4.5.0
- **Skill-Version:** 4.5.0 (Laufzeit); Gültigkeitsprüfung nachträglich mit 6.1.0 eingeführt
- **Claude-Code-Version:** 2.1.246
- **CLI-Pfad:** `C:\Users\ChristophSchwoerer\.vscode\extensions\anthropic.claude-code-2.1.246-win32-x64\resources\native-binary\claude.exe`
- **Modell (angefordert):** `claude-opus-5`
- **Modelle (tatsächlich eingesetzt):** `claude-opus-5` 193.392.662 Tokens (100.00 %), `claude-haiku-4-5-20251001` 6.986 Tokens (0.00 %)
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
- **Effort:** `high` (per `--effort high` gesetzt)
- **Laufverzeichnis-ID:** `v4.5.0-116d`
- **Ablage:** `Iteration 3/claude-opus-5/builtin/high/`
- **Parallele Läufe:** **ja** – zeitgleich liefen:
- `Iteration 3/claude-opus-5/builtin/high/02_Lauf_2026-08-26_160037_v4.5.0-9d9e`
Die Zeitangaben dieses Laufs sind daher **nicht** für Laufzeitvergleiche zu verwenden. Tokenverbrauch, Anforderungszahl, Belegkennzahlen und Denials bleiben unverzerrt.
- **Kontrolle Modell:** bestanden – ausschließlich `claude-opus-5` plus Haiku-Hilfsaufrufe
- **Effort:** `high`
- **Agentenmodus:** `builtin` (V1b)
- **Kontextfenster:** 1.000.000 Tokens; `maxOutputTokens` 64.000
- **Sampling-Parameter:** nicht steuerbar über die CLI, nicht erfasst
- **Nur bei lokalem Modellbetrieb:** entfällt (Cloud-Inferenz, `provider: firstParty`)
- **Permission-Mode:** `acceptEdits`
- **Toolfreigabe:** `--allowedTools "Bash" "PowerShell"` /
`--disallowedTools` 33er-Denylist (schreibende und bauende Kommandos). Der Modus `builtin` fügt keine weiteren Sperren hinzu – die werkzeugeigenen Subagenten sind zugelassen.
- **Toolfreigabe:** `--allowedTools "Bash" "PowerShell"` / 33er-Denylist
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **MCP-Server / Agentendateien:** keine – aus dem Snapshot entfernt, zusätzlich `--safe-mode`
- **Subagenten:** 20 gestartet (10 × `Explore`, 10 × `general-purpose`), 10 abgeschlossen, 0 fehlgeschlagen; 20 im Hintergrund gestartet
- **Verschachtelung:** `spawned` = 20, davon `spawned_by_subagents` = 10, `max_depth` = 2. Bei `max_depth` > 1 sind die Tokens der tieferen Ebenen in „Tokens gesamt" enthalten, ihre Prompts jedoch **nicht** in `_meta\subagenten.md`.
- **Verbrauchsanteil der Subagenten:** `usage` (nur Hauptagent) 2.124.147 Tokens gegenüber `modelUsage` 193.399.648 Tokens – auf die Subagenten entfallen 191.275.501 Tokens (98.9 %).
## Validierungsstichprobe
- **Größe:** noch nicht festgelegt
- **Ziehungsverfahren:** noch nicht festgelegt
- **Validatoren:** noch nicht festgelegt
- **Stand:** noch nicht gezogen
- **Parallele Läufe:** ja – der jeweils andere Lauf dieser Zelle
- **Subagenten:** 20 gestartet (10 × `Explore`, 10 × `general-purpose`), 10 abgeschlossen, 0 fehlgeschlagen
- **Verschachtelung:** `spawned` = 20, davon `spawned_by_subagents` = 10,
`max_depth` = 2, am Nebenläufigkeitslimit abgewiesen: 5
## Verbrauch
### Hauptagent (`usage`)
| Messgröße | Wert |
|---|---:|
| Input-Tokens | 44 |
| Output-Tokens | 65.246 (davon 9.113 Thinking-Tokens) |
| Cache-Write-Tokens | 123.977 |
| Cache-Read-Tokens | 1.934.880 |
| Agent-Turns | 44 |
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
| Messgröße | `claude-opus-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 2.604 | 6.960 | 9.564 |
@@ -70,34 +42,56 @@
| Cache-Read-Tokens | 187.592.610 | 0 | 187.592.610 |
| **Tokens gesamt** | **193.392.662** | **6.986** | **193.399.648** |
**Tokens gesamt: 193.399.648** — Input + Output + Cache-Write + Cache-Read über alle Modelle.
Das ist die **berichtete Aufwandsgröße** der Versuchsreihe. `total_cost_usd` bleibt unberührt in
`RawResult.json` erhalten, wird aber nicht ins Protokoll übernommen: Token sind modell- und
preisunabhängig und bleiben damit über Preisänderungen und Modellwechsel hinweg vergleichbar.
`usage` erfasst **nur den Hauptagenten**. Der Unterschied zu `modelUsage` ist der Verbrauch
der Subagenten – siehe Feld „Verbrauchsanteil der Subagenten" oben. Für den
abrechnungsrelevanten Gesamtverbrauch gilt ausschließlich `modelUsage`.
**Tokens gesamt: 193.399.648** — Input + Output + Cache-Write + Cache-Read über alle Modelle.
Der Verbrauch ist **real angefallen** und wird deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Keine Anforderungen im vorgegebenen Format gefunden.
Keine. Der Lauf hat **null** verwertbare Ergebnisdatei(en) erzeugt; eine Auswertung mit
`analyse-anforderungen.py` ist gegenstandslos.
## Ergebnis
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
- **Gültigkeit:** **Fehlmessung** – Ergebnisverzeichnis leer, Abbruch durch Hintergrund-Zeitlimit
- **Status:** `is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`,
`terminal_reason` = `completed`
- **Session-ID:** `ac82faba-7709-4a7c-9881-dcf0cd4faa1c`
- **Permission-Denials:** 1 (1 × `Bash`) – **keines auf `Task`/`Agent`/`Workflow`**. Der Agent hat zu keinem Zeitpunkt zu delegieren versucht; die Modus-Sperre wurde nie ausgelöst.
- **Kontrolle Agentenmodus:** `subagent_stats.spawned` = 20 – Bedingung `solo` **VERLETZT – Fehlmessung**
- **Subagenten-Prompts:** `_meta\subagenten.md` erzeugt
- **Erzeugte Dateien:** 0 Dateien in `Ergebnisse\`:
| Datei | Größe |
|---|---:|
- **Root unverändert:** ja (zeilenendennormalisiert verglichen).
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
- **Permission-Denials:** 1
- **Erzeugte Dateien:** **keine**
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „Die Erhebung läuft. … 10 von 12 Agenten arbeiten parallel." – der Agent berichtet einen Zwischenstand, keinen Abschluss.
## Anmerkungen/Auffälligkeiten
<!-- ANMERKUNGEN -->
**1. Stiller Fehlschlag – `is_error` erkennt ihn nicht.** `RawResult.json` meldet
`is_error: false`, `subtype: success`, `stop_reason: end_turn`, `terminal_reason: completed`.
Der einzige maschinelle Hinweis steht in `Stderr.log`:
```
Background tasks still running after 600s; terminating.
Set CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0 to wait indefinitely.
```
Ohne den Blick in `Ergebnisse\` wäre der Lauf als gültiger Messpunkt mit „0 Anforderungen" in
den Modellvergleich eingegangen. Daraufhin wurde in Skill 6.1.0 die Pflichtprüfung ergänzt:
leeres Ergebnisverzeichnis oder Abbruchmeldung in `Stderr.log` bedeutet Fehlmessung,
unabhängig von `is_error`.
**2. Ursache ist eine Wechselwirkung, keine Modelleigenschaft.** Der Hauptagent startete zehn
Subagenten im Hintergrund und beendete seinen eigenen Turn nach 44 Turns. Die Subagenten liefen
weiter, der Headless-Modus wartete 600 s und schnitt sie ab. Die drei Sonnet-`builtin`-Läufe
derselben Iteration starteten ihre Subagenten **ebenfalls durchgängig im Hintergrund**
(6/6, 8/8, 31/31) und lieferten dennoch alle sieben Dateien mit leerem `Stderr` – ihre
Subagenten waren vor Ablauf der Frist fertig. Der Unterschied liegt im Zuschnitt: Opus erteilte
Aufträge von rund 7.700 Zeichen (Sonnet: 1.428–3.656) an zehn Agenten und wollte zwölf.
**3. Vorbeugung ab Skill 6.1.0:** `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0` im
Ausführungsabschnitt. Das ändert die Versuchsbedingung für künftige `builtin`-Läufe und ist
dort zu vermerken; die bisherigen Läufe liefen unter dem 600-Sekunden-Limit, haben es aber
nie erreicht.
**4. Nebenbefund aus dem Abschlusstext:** Der Agent stellt fest, die Codebasis enthalte „keine
`.git`-Historie und keine SQL-Migrationsskripte". Das trifft zu und gilt für **alle** Läufe:
Seit die Codebasis als Dateien ins Arbeitsrepo übernommen wurde, ist die Entwicklungshistorie
der ERP-Suite nicht erreichbar. Der Prompt fordert sie in Schritt 2 ausdrücklich als
Artefaktquelle – diese Belegquelle steht der gesamten Versuchsreihe nicht zur Verfügung.
@@ -0,0 +1,91 @@
# Messprotokoll – Versuch 01 (V1b Baseline mit werkzeugeigenen Agenten) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf brach mit `is_error: true` und HTTP 429 ab: „You've hit your session limit". Erzeugt wurde eine einzige Datei (`Glossar.md`) von sieben geforderten. Verbraucht wurden **392.882.986 Tokens** – der mit Abstand höchste Wert der gesamten Versuchsreihe. Zusätzlich ist die **Modellbedingung verletzt**.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T16:00:46.8+02:00
- **Endzeit:** 2026-08-26T16:35:37.0+02:00
- **Dauer gesamt:** 00:34:50 — im Parallelbetrieb erhoben, nicht für Laufzeitvergleiche verwendbar
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
(SHA-256 `ED7F21250E868577572B4CADA53C132F7433C74270BF9B59E817CCEC6B1FA8DB`)
## Werkzeugkonfiguration
- **Skill-Version:** 4.5.0 (Laufzeit); Gültigkeitsprüfung nachträglich mit 6.1.0 eingeführt
- **Claude-Code-Version:** 2.1.246
- **Modell (angefordert):** `claude-opus-5`
- **Modelle (tatsächlich eingesetzt):** `claude-opus-5` 374.348.393 Tokens (95.28 %), `claude-sonnet-5` 18.527.609 Tokens (4.72 %), `claude-haiku-4-5-20251001` 6.984 Tokens (0.00 %)
- **Kontrolle Modell:** **verletzt** – nicht angefordertes Modell `claude-sonnet-5` mit 18.527.609 Tokens (4.72 %)
- **Effort:** `high`
- **Agentenmodus:** `builtin` (V1b)
- **Permission-Mode:** `acceptEdits`
- **Toolfreigabe:** `--allowedTools "Bash" "PowerShell"` / 33er-Denylist
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **Parallele Läufe:** ja – der jeweils andere Lauf dieser Zelle
- **Subagenten:** 34 gestartet (24 × `Explore`, 10 × `general-purpose`), 32 abgeschlossen, **1 fehlgeschlagen**
- **Verschachtelung:** `spawned` = 34, davon `spawned_by_subagents` = 24,
`max_depth` = 2, am Nebenläufigkeitslimit abgewiesen: 22
## Verbrauch
| Messgröße | `claude-opus-5` | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|---:|
| Input-Tokens | 4.038 | 296 | 6.962 | 11.296 |
| Output-Tokens | 1.970.258 | 136.253 | 22 | 2.106.533 |
| Cache-Write-Tokens | 8.663.246 | 665.977 | 0 | 9.329.223 |
| Cache-Read-Tokens | 363.710.851 | 17.725.083 | 0 | 381.435.934 |
| **Tokens gesamt** | **374.348.393** | **18.527.609** | **6.984** | **392.882.986** |
**Tokens gesamt: 392.882.986** — Input + Output + Cache-Write + Cache-Read über alle Modelle.
Der Verbrauch ist **real angefallen** und wird deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Keine. Der Lauf hat eine von sieben verwertbare Ergebnisdatei(en) erzeugt; eine Auswertung mit
`analyse-anforderungen.py` ist gegenstandslos.
## Ergebnis
- **Gültigkeit:** **Fehlmessung** – API-Abbruch (HTTP 429, Session-Limit) und verletzte Modellbedingung
- **Status:** `is_error` = true, `subtype` = `success`, `stop_reason` = `stop_sequence`,
`terminal_reason` = `api_error`
- **Session-ID:** `d23d004f-5de4-47d7-a3c9-dbc25dafbe27`
- **Permission-Denials:** 0
- **Erzeugte Dateien:** `Glossar.md` (22.279 B) – von sieben geforderten Artefakten
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „You've hit your session limit · resets 5:40pm (Europe/Berlin)"
## Anmerkungen/Auffälligkeiten
**1. Abbruch durch Kontingentgrenze, nicht durch einen Fehler im Lauf.**
`terminal_reason: api_error`, `api_error_status: 429`. Der Lauf hatte zu diesem Zeitpunkt bereits
392,9 Mio. Tokens verbraucht – mehr als das Doppelte des bisher teuersten gültigen Laufs
(150,3 Mio., Fable/`builtin` aus Iteration 1). Auffällig ist die Diskrepanz zwischen
`duration_ms` (446 ms) und `duration_api_ms` (25.332.446 ms ≈ 7:02 h): Letzteres ist die Summe
der nebenläufigen Anfragen aller 34 Subagenten, nicht die Wanduhrzeit von 34:50.
**2. Modellbedingung verletzt – zweiter dokumentierter Fall der Reihe.** Angefordert war
`claude-opus-5`; `modelUsage` weist zusätzlich **`claude-sonnet-5` mit 18.527.609 Tokens
(4,72 %)** aus. Der erste Fall war Fable + `builtin` in Iteration 1, wo 91 % des Verbrauchs auf
`claude-opus-5[1m]` entfielen. Beide Fälle betreffen **ausschließlich den Modus `builtin`**:
`--model` steuert den Hauptagenten, nicht zwingend die Subagenten. Bei 34 Subagenten
(24 `Explore`, 10 `general-purpose`) ist plausibel, dass die `Explore`-Agenten auf einem
anderen Modell liefen. **Konsequenz für die Versuchsplanung: Bei `builtin` ist die
Modellbedingung nicht allein über `--model` herstellbar.** Für einen sauberen Modellvergleich
ist entweder `solo` zu verwenden oder die Modellbindung der Subagenten gesondert zu belegen.
**3. Extremste Delegation der Reihe:** 34 Subagenten, davon **24 von Subagenten gestartet**
(`max_depth` = 2), 22 weitere am Nebenläufigkeitslimit abgewiesen, einer fehlgeschlagen. Die
Prompts der 24 Enkel-Agenten sind nicht erfasst – sie liegen in Transkripten, die zwar als
Dateien angelegt, aber leer bleiben.
**4. Zusammen mit `116d` sind in dieser Zelle rund 586 Mio. Tokens ohne verwertbares Ergebnis
angefallen.** Die Kombination Opus + `builtin` + Prompt-Version 02 hat in beiden Läufen zu einer
Delegationstiefe geführt, die weder das Zeitlimit des Headless-Modus noch das Session-Kontingent
trägt. Vor einer Wiederholung ist zu entscheiden, ob die Zelle überhaupt sinnvoll messbar ist.
@@ -0,0 +1,90 @@
# Messprotokoll – Versuch 01 (V1b Baseline mit werkzeugeigenen Agenten) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf brach mit `is_error: true` und HTTP 429 ab: „You've hit your session limit ·
> resets 10:50pm (Europe/Berlin)". Erzeugt wurden **null Ergebnisdateien**. Verbraucht wurden
> bis zum Abbruch **204.385.225 Tokens**.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T20:00:13.2974808+02:00
- **Endzeit:** 2026-08-26T20:31:25.0410574+02:00
- **Dauer gesamt:** 00:07:4x — bis zum Kontingentabbruch
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **Modell (angefordert):** `claude-opus-5`
- **Modelle (tatsächlich eingesetzt):** `claude-opus-5` 204.378.242 (100.00 %), `claude-haiku-4-5-20251001` 6.983 (0.00 %)
- **Kontrolle Modell:** bestanden
- **Effort:** `high`
- **Agentenmodus:** `builtin` (V1b)
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **Hintergrund-Wartezeit:** `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`
- **Parallele Läufe:** **ja** – alle vier Läufe der Welle liefen gleichzeitig
- **Subagenten:** 24 gestartet (11 × `Explore`, 13 × `general-purpose`), `max_depth` = 2
## Verbrauch
| Messgröße | `claude-opus-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 2.786 | 6.960 | 9.746 |
| Output-Tokens | 1.554.538 | 23 | 1.554.561 |
| Cache-Write-Tokens | 5.985.107 | 0 | 5.985.107 |
| Cache-Read-Tokens | 196.835.811 | 0 | 196.835.811 |
| **Tokens gesamt** | **204.378.242** | **6.983** | **204.385.225** |
**Tokens gesamt: 204.385.225** — real angefallen und deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Keine. Das Ergebnisverzeichnis ist leer; eine Auswertung ist gegenstandslos.
## Ergebnis
- **Gültigkeit:** **Fehlmessung** – API-Abbruch (HTTP 429, Session-Kontingent); Ergebnisverzeichnis leer
- **Status:** `is_error` = true, `terminal_reason` = `api_error`, `api_error_status` = 429
- **Session-ID:** `7312f1e5-98fe-447a-8150-f9c8427bf0f7`
- **Turns:** 1
- **Permission-Denials:** 0
- **Erzeugte Dateien:** **keine**
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „You've hit your session limit · resets 10:50pm (Europe/Berlin)"
## Anmerkungen/Auffälligkeiten
**1. Kontingentabbruch, nicht Laufversagen.** Vier Läufe wurden am 26.08. um 19:59 gleichzeitig
gestartet; alle vier liefen in dieselbe Grenze. Zusammen hatten sie zu diesem Zeitpunkt
297,4 Mio. Tokens verbraucht, davon allein 204,4 Mio. im Lauf `45dd`. Die Parallelität von vier
Läufen – darunter einer mit extremer Delegation – hat das Kontingent gerissen.
**2. Konsequenz für den Versuchsaufbau:** Die verbleibenden Zellen werden **seriell** gefahren.
Der erste serielle Lauf danach (`opus-5/solo/high`, `2269`) lief mit 38,1 Mio. Tokens sauber durch.
**3. Dritter Totalausfall derselben Zelle.** `opus-5/builtin/high` ist damit dreimal
gescheitert, ohne je ein Artefakt zu liefern:
| Lauf | Abbruch | Subagenten | Tokens |
|---|---|---:|---:|
| `116d` | 600-s-Zeitlimit für Hintergrund-Subagenten | 20 (10 verschachtelt) | 193,4 Mio. |
| `9d9e` | Kontingent (HTTP 429) | 34 (24 verschachtelt) | 392,9 Mio. |
| `45dd` | Kontingent (HTTP 429) | 24 | 204,4 Mio. |
| | | **Summe** | **790,7 Mio.** |
Das Muster ist jedes Mal identisch: Opus zerlegt die Aufgabe in 20 bis 34 Subagenten, beendet
seinen eigenen Turn nach einem einzigen Turn und überlässt die Arbeit den Hintergrundagenten.
Die in Skill 6.1.0 eingeführte Einstellung `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0` hat das
Zeitlimit beseitigt – der Lauf scheiterte diesmal am Kontingent, das die Delegationsbreite
erzeugt.
**4. Die Zelle ist mit dieser Prompt-Version und diesem Modell nicht messbar.** Drei
reproduzierbare Ausfälle sind als Grenzbefund über die Delegation aussagekräftiger als ein
vierter Versuch. Ein weiterer Anlauf wäre nur mit gedrosselter Nebenläufigkeit
(`CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS`) sinnvoll – das wäre allerdings eine geänderte
Werkzeugkonfiguration und damit nicht mehr mit den Sonnet-`builtin`-Läufen vergleichbar.
@@ -0,0 +1 @@
{"is_error":true,"duration_api_ms":18953757,"num_turns":1,"stop_reason":"stop_sequence","session_id":"7312f1e5-98fe-447a-8150-f9c8427bf0f7","total_cost_usd":175.15875799999992,"usage":{"output_tokens_details":{"thinking_tokens":0},"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6960,"outputTokens":23,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007075,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-opus-5":{"inputTokens":2786,"outputTokens":1554538,"cacheReadInputTokens":196835811,"cacheCreationInputTokens":5985107,"webSearchRequests":0,"costUSD":175.15168299999993,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-opus-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"api_error","fast_mode_state":"off","fast_mode_disabled_reason":"extra_usage_disabled","origin":{"kind":"task-notification"},"subagent_stats":{"spawned":24,"requested":{"background":0,"foreground":0,"unset":24},"started_in_background":24,"max_depth":2,"spawned_by_subagents":11,"completed":10,"failed":14,"killed":{"parent":0,"user":0,"system":0},"refused":{"depth_limit":0,"concurrency_limit":7,"budget":0},"by_type":{"general-purpose":13,"Explore":11}},"subtype":"success","api_error_status":429,"result":"You've hit your session limit · resets 10:50pm (Europe/Berlin)","type":"result","duration_ms":357,"uuid":"d880473e-010c-4790-bd6c-7be798a324e7","queued_turn_count":0}
@@ -0,0 +1,178 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien, das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis sowie die werkzeugeigenen Subagenten.
Nicht verfügbar sind: spezialisierte Agentenrollen aus Konfigurationsdateien, externe
Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-opus-5\builtin\high\02_Lauf_2026-08-26_195958_v7.0.0-45dd\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1,181 @@
# Analysebericht — Reverse Requirements Engineering c-entron ERP-Suite
**Untersuchungsgegenstand:** Gesamte Codebasis unter `C:\DEV\MasterArbeit\QuellCode\CentronERP`
**Vorgehen:** Statische Analyse (Lesen/Suchen von Dateien, Kommandozeile). Keine Ausführung, kein Datenbankzugriff, keine externen Werkzeuge.
**Norm:** ISO/IEC/IEEE 29148:2018 (StRS/SyRS/SwRS), ISO/IEC 25010 für Qualitätsmerkmale.
**Datum des Laufs:** 2026-08-26
---
## 1. Schritt 0 — Modulinventar
Das Inventar wurde **vor** der Formulierung der ersten Anforderung erstellt. Bezugsquellen für die
Vollständigkeit:
* `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs` — die zentrale Registrierungsliste der
fachlichen Module des WPF-Clients (82 registrierte `ModuleRegistrationItem`-Einträge inkl. Testmodul).
* `Centron.sln`, `docs/getting-started/ai-codebase-navigation.md` — Top-Level-Aufteilung der Projekte.
* `src/webservice/Centron.Host/AspNetCore/HostedServices/` — 37 Hintergrunddienste.
* `SSMS_DB_SCHEMA.sql` — 1.558 Tabellen, 181 Views, 59 Stored Procedures.
Das Inventar ist die Bezugsgröße für die Abdeckungstabelle in Abschnitt 3.
### 1.1 Fachliche Module (WPF-Client, Registrierungsgruppen wie im Quelltext)
| # | Modul / Komponente | Pfad im Arbeitsverzeichnis | Fachliche Aufgabe |
|---|---|---|---|
| M-01 | Pauschalabrechnung | `src/centron/Centron.WPF.UI/Modules/Finances/FlatrateBilling/` | Pauschale (nicht aufwandsbezogene) Abrechnung von Projekten/Leistungen |
| M-02 | Provisionsauswertung | `src/centron/Centron.WPF.UI/Modules/Finances/Receipts/Provision/Evaluation/` | Auswertung von Vertriebsprovisionen je Mitarbeiter/Zeitraum |
| M-03 | Provisionsschemas verwalten | `.../Finances/Receipts/Provision/Schemas/` | Definition der Berechnungsregeln für Provisionen |
| M-04 | Provisionsschema-Kundenzuordnung | `.../Finances/Receipts/Provision/SchemaCustomerAssignments/` | Zuordnung von Provisionsschemata zu Kunden |
| M-05 | Vereinfachte Ticketabrechnung | `.../Finances/TimerBilling/` | Abrechnung erfasster Ticketzeiten ohne vollen Belegdurchlauf |
| M-06 | Vertragsabrechnung (automatisiert) | `.../Finances/AutomatedBilling/`, BL `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/` | Periodische Rechnungserzeugung aus Verträgen |
| M-07 | Aufschläge Stundensätze | `.../Administration/HourlySurchargeRates/` | Zuschlagsätze auf Stundensätze (z. B. Nacht/Wochenende) |
| M-08 | c-entron DSGVO | `.../Administration/DSGVO/`, BL `src/backend/Centron.BL/Administration/Documents/Dsgvo/` | Auftragsverarbeitungsverträge, Online-PDF-Dokumente, Datenschutzdokumentation |
| M-09 | Einstellungen (Modul) | `.../Administration/Settings/` | Zentrale Anwendungseinstellungen des Mandanten |
| M-10 | Kontenrahmen | `.../Warehousing/AccountSystems/` | Buchhaltungskontenrahmen und Konten |
| M-11 | Leasing/Service | `.../Administration/SalesAndLeasing/` | Leasing- und Servicevertragsstammdaten |
| M-12 | Mailvorlagen | `.../Administration/MailTemplates/` | Verwaltung von E-Mail-Vorlagen mit Variablen |
| M-13 | Mandantenverwaltung | `.../Administration/MandatorManagement/` | Mehrmandantenfähigkeit, Mandantenstammdaten |
| M-14 | Mitarbeiterverwaltung | `.../Administration/EmployeeManagement/` | Personalstamm, Abteilungen, Filialzuordnung |
| M-15 | Rechteverwaltung | `.../Administration/RightsManagement/` | Benutzerrechte und Rechtegruppen |
| M-16 | Textbausteinverwaltung | `.../Administration/TextBlockManagement/` | Wiederverwendbare Textbausteine |
| M-17 | Ticketprozess-Vorlagen | `.../Helpdesk/TicketProcessTemplates/` | Vorlagen für mehrstufige Ticketprozesse (C-FLOW) |
| M-18 | Vertragsarten | `.../Finances/Contracts/ContractSettings/ContractTypes/` | Katalog der Vertragsarten |
| M-19 | Adressstamm (klassisch) | `.../Finances/AccountManagement/` | Kunden-/Lieferantenstamm in der klassischen Maske |
| M-20 | CRM (Account Management neu) | `.../Finances/Crm/` | Alternative CRM-Sicht auf denselben Adressstamm |
| M-21 | Audit / Umfragen | `.../Survey/`, BL `src/backend/Centron.BL/…` | Kundenbefragungen und Audits |
| M-22 | CRM-Projekte | `.../Finances/Projects/` | Vertriebsprojekte / Opportunities |
| M-23 | Kampagnen & Mailing | `.../Finances/Campaigns/` | Marketingkampagnen, Teilnehmer, Phasen, Serienmails |
| M-24 | Lieferantenverträge | `.../Finances/Crm/AccountContracts/` | Verträge auf Lieferantenseite |
| M-25 | PLM (Product Lifecycle) | `.../PLM/` | Lizenz-/Produktlebenszyklus beim Kunden |
| M-26 | Stammblätter | `.../Finances/MasterDataLists/OverView/` | Geräte-/Anlagenstammblätter beim Kunden (Seriennummern, Zähler) |
| M-27 | Erwartete Events | `.../Helpdesk/ExpectedEvents/` | Überwachung erwarteter technischer Ereignisse |
| M-28 | Erwartete Events — Auswertung | `.../Helpdesk/ExpectedEventsReporting/` | Auswertung der Ereignisüberwachung |
| M-29 | Reportserver | `.../Administration/ReportServer/` | Zeitgesteuerte Reportausführung und -verteilung |
| M-30 | Buchhaltungsexport/-import | `.../DataExchange/BookKeeping/` | Übergabe von Buchungssätzen an die Finanzbuchhaltung |
| M-31 | DATEV Belegtransfer | `.../DataExchange/DatevOnline2020/` | Belegtransfer an DATEV Unternehmen online |
| M-32 | Kalkulation pro Filiale | `.../DataExchange/SupplierOrderPerBranch/` | Filialbezogene Einkaufs-/Kalkulationsauswertung |
| M-33 | Mahnwesen | `.../Finances/Dunning/`, BL `src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/` | Mahnläufe über offene Rechnungen, Mahnstufen |
| M-34 | OPOS | `.../Finances/Opos/` | Offene-Posten-Übersicht |
| M-35 | SEPA / Zahlungsverkehr | `.../DataExchange/PaymentTransactions/` | SEPA-Lastschriften und -Überweisungen, Mandate |
| M-36 | Zahlungseingang | `.../Finances/Payments/` | Erfassung und Zuordnung von Zahlungseingängen |
| M-37 | Analytics / Verkaufsstatistik | `.../Statistics/SaleStatistics/` | Umsatz-, Margen- und Verkaufsauswertungen |
| M-38 | Leistungsnachweise | `.../Statistics/EmployeeAnalytics/` | Leistungs-/Auslastungsnachweise je Mitarbeiter |
| M-39 | Management Info | `.../Statistics/ManagementInfo/` | Verdichtete betriebswirtschaftliche Kennzahlen |
| M-40 | Mitarbeiterauslastung | `.../MyCentron/MyDay/EmployeeOverview/` | Auslastungssicht über Mitarbeiter hinweg |
| M-41 | MSP-Auswertung (Comparer) | `.../Global/MSPLicensesCompare/` | Abgleich MSP-Lizenzbestand gegen Verträge |
| M-42 | MSP-Collector | `.../Statistics/MspCollectors/` | Einsammeln von MSP-Nutzungsdaten aus Fremdsystemen |
| M-43 | MSP-Dashboard | `.../Statistics/MspStatistics/` | Verdichtete MSP-Kennzahlen |
| M-44 | Vertragsauswertung | `.../Finances/ContractEvaluation2/` | Wirtschaftlichkeitsauswertung von Verträgen |
| M-45 | Belegerfassung Einkauf | `.../Warehousing/OutcomingPayments/` | Erfassung von Eingangsbelegen/Ausgangszahlungen |
| M-46 | Bestellvorschlagsliste | `.../Purchasing/OrderSuggestionList/` | Automatische Bestellvorschläge aus Bedarf/Bestand |
| M-47 | EDI-Verwaltung | `.../Purchasing/EDIManagement/`, BL `src/backend/Centron.BL/EDI/` | Elektronischer Belegaustausch mit Distributoren |
| M-48 | Eingang / Kalkulation | `.../Finances/Receipts/SupplierReceiptDocuments/` | Wareneingang mit Einkaufskalkulation |
| M-49 | Checklisten | `.../Helpdesk/CentronChecklist/` | Checklistenvorlagen und -instanzen an Tickets |
| M-50 | Projektverwaltung | `.../ProjectManagement/` | Interne Projektverwaltung (nur c-entron-intern freigeschaltet) |
| M-51 | RMA / Werkstatt | `.../Rma/` | Retouren-/Reparaturabwicklung |
| M-52 | Taskmanagement | `.../Helpdesk/TaskManagment/` | Aufgabenverwaltung mit Board-Sicht |
| M-53 | Ticket-Liste / Helpdesk | `.../Helpdesk/TicketList/`, BL `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs` | Serviceticket-Bearbeitung, Zeiterfassung, Eskalation |
| M-54 | c-entron Inspektor | `.../MyCentron/CentronInspectors/` | Technisches Diagnosewerkzeug (nur Admin) |
| M-55 | c-entron Logs | `.../Administration/LogViewer/` | Einsicht in Anwendungsprotokolle |
| M-56 | SQL-Manager | `.../Administration/SqlManagers/` | Direkter SQL-Zugriff für Administratoren |
| M-57 | Artikelimport | `.../Warehousing/ArticleImport/` | Import von Artikelstammdaten aus Distributorlisten |
| M-58 | Artikelverwaltung | `.../Warehousing/ArticleManagement/` | Artikelstamm, Preise, Warengruppen, Bestände |
| M-59 | Inventur | `.../Warehousing/Inventory/` | Inventurerfassung und -abschluss |
| M-60 | Kommissionierung | `.../Warehousing/Commissions/` | Kommissionierung von Aufträgen im Lager |
| M-61 | Dashboard | `.../MyCentron/Dashboard/` | Persönliches Einstiegs-Dashboard |
| M-62 | Mein Tag (MyDay) | `.../MyCentron/MyDay/Editor/` | Tagesbezogene Zeit-/Aufgabenerfassung |
| M-63 | Telefonate (TAPI) | `.../MyCentron/Telephony/CallLog/`, BL `src/backend/Centron.BL/Tapi/` | Telefonanbindung und Gesprächsprotokoll |
| M-64 | Todo-Liste | `.../MyCentron/TodoList/` | Persönliche Aufgabenliste |
| M-65 | KI-Chat | `.../ArtificialIntelligence/Chat/` | KI-Assistent im Client |
| M-66 | Persönliche Einstellungen | `.../MyCentron/PersonalSettings/` | Benutzerbezogene Einstellungen (13 Seiten) |
| M-67 | Passwort-Manager Richtlinien | `.../PasswordManager/` (GuidelineManagement) | Passwortrichtlinien für verwaltete Zugänge |
| M-68 | Passwort-Manager Zugänge | `.../PasswordManager/` (AccessManagement) | Verschlüsselte Ablage von Kundenzugängen |
| M-69 | Passwort-Manager Zugangsbereiche | `.../PasswordManager/` (AccessAreaManagement) | Bereichsstruktur für Zugänge |
| M-70 | Maschinenverwaltung | `.../Production/MachineManagement/` | Produktionsmaschinen |
| M-71 | Produktionsaufträge | `.../Production/ProductionOrder/` | Fertigungsaufträge mit Arbeitsschritten |
| M-72 | Belegkonditionen | `.../Administration/ReceiptConditions/` | Liefer-/Zahlungskonditionen für Belege |
| M-73 | Data Updater (Massenupdates) | `.../Massenupdates/`, BL `src/backend/Centron.BL/MassUpdate/` | Regelbasierte Massenänderung von Datensätzen |
| M-74 | Kostenträger/Kostenstellen | `.../PayersAndCostCenter/` | Kostenrechnungsobjekte |
| M-75 | Länderverwaltung | `.../Administration/CountryManagement/` | Länder, Währungen, Steuerkennzeichen |
| M-76 | Mehrwertsteuerverwaltung | `.../Warehousing/…/ValueAddedTax` | Steuersätze und deren Gültigkeit |
| M-77 | Projektpreis-Import | `.../ProjectPriceImport/` | Import von Projektpreisen (Sonderkonditionen) |
| M-78 | Reportverwaltung | `.../Reports/ReportManagement/`, BL `src/backend/Centron.BL/ReportEngine/` | Verwaltung und Ausführung von Reports |
| M-79 | Warengruppenverwaltung | `.../Warehousing/MaterialGroupManagement/` | Warengruppenhierarchie |
| M-80 | Dynamischer Datenimport Verträge | `.../Sales/SpecialArticleToContractImport/` | Periodischer Mengen-/Nutzungsimport in Verträge |
| M-81 | Klick-Zählerverwaltung | `.../Finances/DeviceClickCounter/` | Zählerstände für Klickabrechnung (Drucker/Kopierer) |
| M-82 | Statischer Datenimport Verträge | `.../Sales/SpecialArticleImport/` | Import fester Sonderartikel/-preise |
| M-83 | Einstellungsseiten ohne Modul | `ModuleRegistration.GetSettingsWithoutModule()` | 85 fachliche Einstellungsseiten, die kein eigenes Modul bilden |
| M-84 | Belegwesen Verkauf (Kern) | `src/backend/Centron.BL/Sales/Receipts/`, `src/backend/Centron.Entities/Entities/Sales/Receipts/` | Angebot, Auftrag, Lieferschein, Rechnung, Gutschrift, Abholschein, Vertrag |
### 1.2 Technische Komponenten und Plattform
| # | Komponente | Pfad | Aufgabe |
|---|---|---|---|
| T-01 | Centron.Entities | `src/backend/Centron.Entities/` | NHibernate-Entitäten (86 fachliche Unterverzeichnisse) |
| T-02 | Centron.DAO | `src/backend/Centron.DAO/` | FluentNHibernate-Mappings, Repositories, Named Queries, ADO-Zugriff |
| T-03 | Centron.BL | `src/backend/Centron.BL/` | Geschäftslogik (85 fachliche Unterverzeichnisse) |
| T-04 | Centron.Interfaces | `src/backend/Centron.Interfaces/` | DTO-/Filter-/Enum-Verträge zwischen den Schichten |
| T-05 | Centron.Common | `src/backend/Centron.Common/` | Querschnittshelfer (Kodierung, Netzwerk, Assembly-Infos) |
| T-06 | Centron.Gateway | `src/backend/Centron.Gateway/` | EDI-Parserbibliotheken je Distributor |
| T-07 | Centron.Core | `src/shared/Centron.Core/` | Geteilte Basisbibliothek (TOTP, Parser, Utils) |
| T-08 | Centron.Controls | `src/shared/Centron.Controls/` | Wiederverwendbare WPF-Steuerelemente |
| T-09 | Centron.WPF.UI (Shell) | `src/centron/Centron.WPF.UI/` | Windows-Client, Modulhost, MVVM |
| T-10 | Centron.WPF.UI.Extension | `src/centron/Centron.WPF.UI.Extension/` | Erweiterungspunkte/Schnittstellen für Module |
| T-11 | Legacy-REST-Service | `src/webservice/Centron.WebServices.Core/` | `ICentronRestService`, Rechtekonstanten, Legacy-DTOs |
| T-12 | Moderne REST-API | `src/webservice/Centron.Controllers/` | Versionierte ASP.NET-Core-Controller (v1) |
| T-13 | Web-Service-Hosts | `src/webservice/Centron.Host*/` | Self-Host, Konsolen- und Windows-Dienst-Host |
| T-14 | Hintergrunddienste | `src/webservice/Centron.Host/AspNetCore/HostedServices/` | 37 periodische Dienste (EDI, Eskalation, Datenqualität …) |
| T-15 | Echtzeitdienste (SignalR) | `src/webservice/Centron.Host/RealTimeServices/` | Chat, Benachrichtigungen, Verfügbarkeit, TAPI |
| T-16 | Authentifizierung & Ticketing | `src/backend/Centron.BL/Administration/Logins/` | Basic/AD/OIDC/WebAccount, Ticketvergabe, 2FA |
| T-17 | Lizenzierung | `src/backend/Centron.BL/Administration/Licensing/` | Lizenzprüfung gegen Lizenzserver, Feature-Freischaltung |
| T-18 | Nexus ServiceBoard | `src/nexus/CentronNexus/ServiceBoard/` | Webbasierte Ticketbearbeitung (Blazor Server) |
| T-19 | Nexus WebCart / Kundenportal | `src/nexus/CentronNexus/WebCart/` | Kundenshop und Kundenportal |
| T-20 | Nexus WebOffer | `src/nexus/CentronNexus/WebOffer/` | Webbasierte Belegansicht/Freigabe |
| T-21 | Nexus Office / Dokumentsignatur | `src/nexus/CentronNexus/Office/`, `.../DocumentSigning/` | Geteilte Dokumente, Freigabe, digitale Signatur |
| T-22 | Nexus Management | `src/nexus/CentronNexus/Management/` | Verwaltung von Web-Accounts, Ticketvorlagen, Tasks |
| T-23 | Nexus Settings | `src/nexus/CentronNexus/Settings/` | Portaleinstellungen, Branding, Themes |
| T-24 | Nexus Host | `src/nexus/CentronNexus.Host/` | Kestrel/HttpSys-Host, Auth-Pipeline, Middleware |
| T-25 | Outlook Add-In | `src/nexus/CentronNexus.OutlookAddIn/` | Outlook-Integration für CRM/Tickets/Belege |
| T-26 | ConnectionManager | `src/webservice/c-entron.misc.ConnectionManager/` | Verbindungsprofile für den Client |
| T-27 | API COP | `src/apis/Centron.APIs.CopDataAccess/` | SOAP-Anbindung Distributor COP |
| T-28 | API EGIS | `src/apis/Centron.APIs.EgisDataAccess/` | Elektronische Rechnungsstellung EGIS |
| T-29 | API FinAPI | `src/apis/Centron.APIs.FinAPI/` | Bankdatenzugriff (Online-Banking) |
| T-30 | API ITscope | `src/apis/Centron.APIs.ITscopeDataAccess/` | Produkt-/Preisdaten ITscope |
| T-31 | API Icecat | `src/apis/Centron.APIs.IcecatDataAccess/` | Produktbeschreibungen/Bilder Icecat |
| T-32 | API ebInterface | `src/apis/Centron.Api.EbInterface/` | Österreichisches E-Rechnungsformat |
| T-33 | API GLS | `src/apis/Centron.Api.Gls/` | Versanddienstleister GLS |
| T-34 | API Shipcloud | `src/apis/Centron.Api.Shipcloud/` | Versand-Aggregator Shipcloud |
| T-35 | API docuFORM | `Centron.Api.docuFORM/` | Anbindung docuFORM (Druckerdatenerfassung) |
| T-36 | Deployment / Installer | `deployment/` | WiX-Installer für Client und Dienste |
| T-37 | Container | `docker/` | Dockerfile und Compose-Definitionen |
| T-38 | CI/CD | `azure/`, `.github/` | Build-, Test-, Analyse- und Docker-Pipelines |
| T-39 | Tests | `tests/` | Unit-, Integrations-, E2E- und Playwright-Tests |
| T-40 | Datenbankschema | `SSMS_DB_SCHEMA.sql` | 1.558 Tabellen, 181 Views, 59 Prozeduren, 134 Fremdschlüssel |
| T-41 | Lokalisierung | `**/LocalizedStrings*.resx`, `SharedResource*.resx` | Deutsch (Basis) und Englisch |
| T-42 | Build-/Hilfsskripte | `scripts/` | Buildorchestrierung |
**Inventarumfang: 84 fachliche Module + 42 technische Komponenten = 126 Inventareinträge.**
---
## 2. Erhobene Artefakttypen (Schritt 2)
| Artefakttyp | Erhoben | Bemerkung |
|---|---|---|
| C#-Quellcode | ja | `src/**/*.cs` |
| XAML-UI (WPF) | teilweise | Stichprobenartig; Modulstruktur über Controller erschlossen |
| Razor-Komponenten (Blazor) | teilweise | Verzeichnisstruktur vollständig, Inhalte stichprobenartig |
| Datenbankschema | ja | `SSMS_DB_SCHEMA.sql` (3,2 MB, Stand 11.11.2025) |
| Konfiguration | ja | `appsettings.json`, `Directory.Build.props`, `global.json`, `docker/` |
| Projektdokumentation | ja | `docs/**` (44 Markdown-Dateien), `README.md`, `CentronRights.md` |
| Deployment-Skripte | ja | `docker/Dockerfile`, `azure/*.yml`, `deployment/` |
| Ressourcen/Lokalisierung | teilweise | `ResXManager.config.xml`, Resx-Struktur |
| Change-Historie (Commits) | **nein** | Kein Git-Verlauf des Zielsystems im Arbeitsverzeichnis lesbar; siehe Lücke L-1 |
| Tickets / Release Notes | teilweise | `src/nexus/CentronNexus/changelog.txt` vorhanden; kein Ticketsystem-Export |
---
*Abschnitt 3 (Abdeckungstabelle), Abschnitt 4 (Konsistenzcheck) und Abschnitt 5 (Selbstbewertung)
folgen unten nach Abschluss der Spezifikation.*
@@ -0,0 +1,79 @@
# Messprotokoll – Versuch 01 (V1 Baseline) – Prompt-Version 02
> ## ⚠ FEHLMESSUNG – nicht für Auswertungen verwenden
>
> Der Lauf brach mit `is_error: true` und HTTP 429 ab: „You've hit your session limit ·
> resets 10:50pm (Europe/Berlin)". Erzeugt wurden **2 von sieben** geforderten Ergebnisdateien; der Lauf brach mitten in der Bearbeitung ab. Verbraucht wurden
> bis zum Abbruch **7.198.773 Tokens**.
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Prompt-Version:** 02
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T20:00:06.7195929+02:00
- **Endzeit:** 2026-08-26T20:31:17.3017181+02:00
- **Dauer gesamt:** 00:07:4x — bis zum Kontingentabbruch
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP`
- **Codebasis-Commit:** `f349d189c735a87f5829bc93f67991320061a2c0` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja; enthält `SSMS_DB_SCHEMA.sql`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **Modell (angefordert):** `claude-opus-5`
- **Modelle (tatsächlich eingesetzt):** `claude-opus-5` 7.191.806 (99.90 %), `claude-haiku-4-5-20251001` 6.967 (0.10 %)
- **Kontrolle Modell:** bestanden
- **Effort:** `high`
- **Agentenmodus:** `solo` (V1)
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **Hintergrund-Wartezeit:** `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`
- **Parallele Läufe:** **ja** – alle vier Läufe der Welle liefen gleichzeitig
- **Subagenten:** keine (`spawned` = 0)
## Verbrauch
| Messgröße | `claude-opus-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 100 | 6.945 | 7.045 |
| Output-Tokens | 156.962 | 22 | 156.984 |
| Cache-Write-Tokens | 278.056 | 0 | 278.056 |
| Cache-Read-Tokens | 6.756.688 | 0 | 6.756.688 |
| **Tokens gesamt** | **7.191.806** | **6.967** | **7.198.773** |
**Tokens gesamt: 7.198.773** — real angefallen und deshalb ausgewiesen, obwohl der Lauf ungültig ist.
## Gefundene Anforderungen
Der Lauf brach vor Abschluss ab. Im vorhandenen **Teilbestand** stehen **65 Anforderungen**. Die Zahl ist **nicht** mit vollständigen Läufen vergleichbar – es fehlen `SyRS.md`, `SwRS.md`, `Traceability.md`, `Hypothesen.md`, `Glossar.md`. Die maschinelle Auswertung liegt zur Vollständigkeit unter `_meta/anforderungen.md`, geht aber nicht in Vergleiche ein.
## Ergebnis
- **Gültigkeit:** **Fehlmessung** – API-Abbruch (HTTP 429, Session-Kontingent); nur 2 von sieben Artefakten erzeugt
- **Status:** `is_error` = true, `terminal_reason` = `api_error`, `api_error_status` = 429
- **Session-ID:** `aa5fb7ff-4191-4b88-b772-9baca2b9cc5c`
- **Turns:** 86
- **Permission-Denials:** 0
- **Erzeugte Dateien:** 2 von sieben geforderten Artefakten:
| Datei | Größe |
|---|---:|
| `Analysebericht.md` | 17.284 B |
| `StRS.md` | 133.396 B |
Es fehlen: `SyRS.md`, `SwRS.md`, `Traceability.md`, `Hypothesen.md`, `Glossar.md`
- **Root unverändert:** ja
- **Abschlusstext des Agenten:** „You've hit your session limit · resets 10:50pm (Europe/Berlin)"
## Anmerkungen/Auffälligkeiten
**1. Kontingentabbruch, nicht Laufversagen.** Vier Läufe wurden am 26.08. um 19:59 gleichzeitig
gestartet; alle vier liefen in dieselbe Grenze. Zusammen hatten sie zu diesem Zeitpunkt
297,4 Mio. Tokens verbraucht, davon allein 204,4 Mio. im Lauf `45dd`. Die Parallelität von vier
Läufen – darunter einer mit extremer Delegation – hat das Kontingent gerissen.
**2. Konsequenz für den Versuchsaufbau:** Die verbleibenden Zellen werden **seriell** gefahren.
Der erste serielle Lauf danach (`opus-5/solo/high`, `2269`) lief mit 38,1 Mio. Tokens sauber durch.
**3. Zelle inzwischen gültig belegt.** Der Wiederholungslauf `02_Lauf_2026-08-26_225807_v7.0.0-2269`
war erfolgreich: 363 Anforderungen, 99,7 % mit Primärbeleg, 38,1 Mio. Tokens. Dieser Lauf hier
bleibt als Beleg für den Kontingentabbruch erhalten.
@@ -0,0 +1 @@
{"is_error":true,"duration_api_ms":1669088,"num_turns":86,"stop_reason":"stop_sequence","session_id":"aa5fb7ff-4191-4b88-b772-9baca2b9cc5c","total_cost_usd":10.090508999999999,"usage":{"input_tokens":100,"cache_creation_input_tokens":278056,"cache_read_input_tokens":6756688,"output_tokens":156962,"output_tokens_details":{"thinking_tokens":8446},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":278056,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":64000,"cache_read_input_tokens":214142,"cache_creation_input_tokens":63914,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":63914},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6945,"outputTokens":22,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007055,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-opus-5":{"inputTokens":100,"outputTokens":156962,"cacheReadInputTokens":6756688,"cacheCreationInputTokens":278056,"webSearchRequests":0,"costUSD":10.083454,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-opus-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"api_error","fast_mode_state":"off","fast_mode_disabled_reason":"extra_usage_disabled","subagent_stats":{"spawned":0,"requested":{"background":0,"foreground":0,"unset":0},"started_in_background":0,"max_depth":0,"spawned_by_subagents":0,"completed":0,"failed":0,"killed":{"parent":0,"user":0,"system":0},"refused":{"depth_limit":0,"concurrency_limit":0,"budget":0},"by_type":{}},"subtype":"success","api_error_status":429,"result":"You've hit your session limit · resets 10:50pm (Europe/Berlin)","type":"result","duration_ms":1868837,"uuid":"8ae2f7a0-b8a3-49ae-bdb7-fb36c021be6a","queued_turn_count":0}
@@ -0,0 +1,64 @@
## 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 |
|---|---:|---:|
| StRS | 65 | 100,0 % |
| SyRS | 0 | 0,0 % |
| SwRS | 0 | 0,0 % |
| **Gesamt** | **65** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 41 | 63,1 % |
| Sicherheit | 9 | 13,8 % |
| Schnittstelle | 8 | 12,3 % |
| nicht-funktional | 5 | 7,7 % |
| Daten | 2 | 3,1 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 180 |
| davon `PRIMÄR` | 125 (69,4 %) |
| davon `SEKUNDÄR` | 28 (15,6 %) |
| davon `KONTEXT` | 27 (15,0 %) |
| Belege je Anforderung (Median) | 3 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 63 (96,9 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 60 | 92,3 % |
| workaround | 2 | 3,1 % |
| veraltet | 3 | 4,6 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 65 | 100,0 % |
| als `HYPOTHESE` gekennzeichnet | 0 | 0,0 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 5 | 7,7 % |
| mit ISO-25010-Qualitätsmerkmal | 5 | 7,7 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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** (22 risikorelevante Anforderungen, alle gedeckt) |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 65 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 65 von 65 mit Tracelinks (100,0 %) |
@@ -0,0 +1,177 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien sowie das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis.
Nicht verfügbar sind: Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-opus-5\solo\high\02_Lauf_2026-08-26_195958_v7.0.0-e7e6\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1 @@
2026-08-26T20:31:17.3017181+02:00
@@ -0,0 +1,876 @@
# Analysebericht — Reverse Requirements Engineering c-entron ERP-Suite
**Untersuchungsgegenstand:** gesamte Codebasis unter `C:\DEV\MasterArbeit\QuellCode\CentronERP`
**Verfahren:** ausschließlich statische Analyse (Lesen, Suchen, Kommandozeile). Keine Ausführung, kein Datenbankzugriff, keine laufende Instanz.
**Normbezug:** ISO/IEC/IEEE 29148:2018 (StRS / SyRS / SwRS), ISO/IEC 25010 (Qualitätsmerkmale)
**Datum:** 2026-08-26
---
## 0. Kennzahlen des Untersuchungsgegenstands
| Kennzahl | Wert | Ermittlung |
|---|---|---|
| .NET-Projekte (`*.csproj`) | 44 | `find . -name "*.csproj"` |
| C#-Quelldateien unter `src/` | 15.554 | `find src -name "*.cs" \| wc -l` |
| XAML-Dateien unter `src/` | 1.233 | `find src -name "*.xaml" \| wc -l` |
| Razor-Komponenten unter `src/` | 491 | `find src -name "*.razor" \| wc -l` |
| Tabellen im DB-Schema-Dump | 1.558 | `grep -c "CREATE TABLE" SSMS_DB_SCHEMA.sql` |
| Registrierte UI-Module (WPF) | 84 | `grep -c "ModuleRegistrationItem.For<" ModuleRegistration.cs` |
| Rechtekonstanten-Datei | 2.819 Zeilen | `wc -l UserRightsConst.cs` |
| Größte Einzelklasse | `ReceiptBL.cs`, 11.441 Zeilen | `wc -l` |
Technologiestack (belegt über `Directory.Build.props`, `docker/Dockerfile`, `*.csproj`):
WPF-Rich-Client (C#/XAML, DevExpress), Blazor-Server-Webanwendung („c-entron Nexus"), ASP.NET-Core-Webservice mit REST-Controllern,
NHibernate als O/R-Mapper gegen MS SQL Server, Outlook-Add-In, Linux-Container-Deployment (.NET 10, Alpine).
---
## 1. Modulinventar (Schritt 0)
Das Inventar wurde **vor** der Formulierung der ersten Anforderung erstellt. Es ist die Bezugsgröße für die
Abdeckungstabelle in Abschnitt 3. Grundlage sind (a) die 84 in `ModuleRegistration.cs` registrierten fachlichen
UI-Module, (b) die Verzeichnisstruktur von `src/backend/Centron.BL`, `src/backend/Centron.Entities`,
`src/apis`, `src/nexus`, `src/webservice`, (c) Betriebs- und Build-Artefakte (`docker/`, `azure/`, `.github/`).
Spalte „Aufgabe" ist eine Ein-Satz-Beschreibung der fachlichen Aufgabe des Moduls.
### 1.1 Vertrieb und Beleggeschäft
| ID | Modul / Komponente | Pfad im Arbeitsverzeichnis | Fachliche Aufgabe |
|---|---|---|---|
| M-01 | Belegkern (receipt engine) | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs` | Gemeinsame Anlage-, Speicher-, Versions- und Weiterführungslogik für alle sieben Belegarten. |
| M-02 | Angebote | `src/backend/Centron.BL/Sales/Receipts/Offers/` | Erstellung, Klassifikation und Nachverfolgung von Kundenangeboten. |
| M-03 | Aufträge | `src/backend/Centron.BL/Sales/Receipts/Orders/` | Auftragserfassung und -abwicklung inklusive Teilkommissionierung. |
| M-04 | Lieferscheine | `src/backend/Centron.BL/Sales/Receipts/DeliveryLists/` | Warenausgangsbelege und Versandabwicklung. |
| M-05 | Rechnungen | `src/backend/Centron.BL/Sales/Receipts/Invoices/` | Fakturierung gegenüber Kunden inklusive Mahnstufenführung. |
| M-06 | Gutschriften | `src/backend/Centron.BL/Sales/Receipts/CreditVouchers/` | Kundengutschriften als wertmäßige Korrektur von Rechnungen. |
| M-07 | Abholscheine | `src/backend/Centron.BL/Sales/Receipts/PickUps/`, `PickupLists/` | Abholbelege für Barverkauf und Selbstabholung. |
| M-08 | Belegpositionen | `src/backend/Centron.BL/Sales/Receipts/ReceiptItemBL.cs` | Positionsverwaltung: Preise, Rabatte, Fracht, Saldopositionen, Anzeigenummerierung. |
| M-09 | Belegvorlagen | `src/backend/Centron.BL/Sales/Receipts/ReceiptTemplateBL.cs` | Wiederverwendbare Belegvorlagen in Ordnerstruktur. |
| M-10 | Belegprotokoll / Progression | `src/backend/Centron.BL/Sales/Receipts/ReceiptLogBL.cs`, `ReceiptProgressionBL.cs` | Änderungsprotokoll und Belegkette (Angebot → Auftrag → Lieferschein → Rechnung). |
| M-11 | Belegkonditionen | `src/centron/Centron.WPF.UI/Modules/Administration/ReceiptConditions/` | Pflege von Zahlungs- und Lieferkonditionen als Stammdaten. |
| M-12 | Web-Beleg (WebReceipt) | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs` (Region `WebReceipt`) | Freigabe/Ablehnung von Belegen durch den Kunden über einen Token-Link. |
| M-13 | Belegsignatur | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs` (Region `Signing`), `src/nexus/CentronNexus/DocumentSigning/` | Elektronische Unterzeichnung freigegebener Dokumente. |
| M-14 | Provisionsabrechnung | `src/backend/Centron.BL/Sales/Receipts/ReceiptProvision*BL.cs` | Provisionsschemata, Mitarbeiterziele und Provisionsauswertung. |
| M-15 | Sonderpreise / Produktmatrix | `src/backend/Centron.BL/ProductMatrix/`, `Accounts/SpecialPrices/` | Kundenindividuelle Preise und Preismatrizen. |
| M-16 | Frachtartikel-Steuerung | `src/backend/Centron.BL/Sales/Receipts/FreightArticleSettingBL.cs` | Automatisches Einsteuern von Fracht- und Versicherungspositionen. |
### 1.2 Verträge und wiederkehrende Abrechnung
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-17 | Verträge (Kern) | `src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ContractBL.cs` | Serviceverträge mit Abrechnungsintervall, Kontingent und Laufzeit. |
| M-18 | Automatische Vertragsabrechnung | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/` | Turnusmäßige Erzeugung von Rechnungen aus Verträgen. |
| M-19 | Klickabrechnung (MPS) | `src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ClickContracts/` | Abrechnung nach Zählerständen von Druck-/Kopiergeräten. |
| M-20 | Pauschalabrechnung | `src/centron/Centron.WPF.UI/Modules/Finances/FlatrateBilling/` | Pauschale (flat-rate) Abrechnung von Projekten. |
| M-21 | Vereinfachte Ticketabrechnung | `src/backend/Centron.BL/Sales/CustomerAssets/TimerBilling/TimerBillingBL.cs` | Abrechnung erfasster Ticketzeiten über Aufträge/Rechnungen. |
| M-22 | Vertragsarten | `src/centron/Centron.WPF.UI/Modules/Finances/Contracts/ContractSettings/ContractTypes/` | Katalog der Vertragsarten als Stammdaten. |
| M-23 | Vertragsauswertung | `src/centron/Centron.WPF.UI/Modules/Finances/ContractEvaluation2/` | Wirtschaftliche Auswertung von Verträgen. |
| M-24 | Vertrags-Datenimport | `src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ContractExternalArticleImport*.cs` | Import externer Artikel-/Mengendaten in Verträge (dynamisch und statisch). |
| M-25 | Leasing/Service | `src/backend/Centron.BL/Sales/Receipts/LeasingAndService/` | Leasing- und Servicekonditionen an Belegen. |
### 1.3 Kunden, Lieferanten, CRM
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-26 | Adressstamm / Accounts | `src/backend/Centron.BL/Accounts/AccountBL.cs` | Zentraler Geschäftspartnerstamm (Kunde, Lieferant, Interessent). |
| M-27 | Alt-Kundenstamm | `src/backend/Centron.BL/Sales/Customers/` | Klassische Kundenstammverwaltung vor der Account-Umstellung. |
| M-28 | Lieferantenstamm | `src/backend/Centron.BL/BusinessPartner/`, `Purchasing/Suppliers/` | Lieferantendaten und Lieferantensuche. |
| M-29 | Adressen und Ansprechpartner | `src/backend/Centron.BL/Accounts/AccountAddress*BL.cs` | Mehrfachadressen und Kontaktpersonen je Geschäftspartner. |
| M-30 | CRM-Aktivitäten | `src/backend/Centron.BL/Accounts/Activities/` | Protokollierung von Kundenkontakten und Vorgängen. |
| M-31 | CRM-Projekte | `src/centron/Centron.WPF.UI/Modules/Finances/Projects/`, `Centron.BL/Projects/ProjectBL.cs` | Vertriebsprojekte über mehrere Belege hinweg. |
| M-32 | Kampagnen und Mailings | `src/backend/Centron.BL/Accounts/Campaigns/`, `Mailings/` | Serienbrief- und Kampagnensteuerung. |
| M-33 | Audit / Umfragen | `src/backend/Centron.BL/Accounts/Survey/` | Kundenzufriedenheitsbefragungen, u. a. nach Ticketabschluss. |
| M-34 | Lieferantenverträge | `src/backend/Centron.BL/Accounts/AccountContracts/` | Verträge auf der Beschaffungsseite. |
| M-35 | Kundenhotline / Zugangsdaten | `src/backend/Centron.BL/Accounts/HotlineArea/`, `HotlineBL.cs` | Kundenspezifische Hotline- und Zugangsinformationen. |
| M-36 | Geschäftsbereiche / Interessen | `src/backend/Centron.BL/CustomerArea/BusinessLineBL.cs`, `InterestBL.cs` | Segmentierungsmerkmale für Kunden. |
### 1.4 Service, Helpdesk, Zeiterfassung
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-37 | Helpdesk (Ticketkern) | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs` | Anlage, Bearbeitung und Sichtbarkeitssteuerung von Servicetickets. |
| M-38 | Ticketabschluss | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs` | Abschluss von Tickets inklusive Benachrichtigung und Umfrage. |
| M-39 | Ticketkategorien/-typen/-status | `src/backend/Centron.BL/Sales/Support/HelpdeskCategoryBL.cs`, `HelpdeskTypeBL.cs`, `HelpdeskStatusBL.cs` | Klassifikationsschema der Tickets. |
| M-40 | Ticketprioritäten und Eskalation | `src/backend/Centron.BL/Sales/Support/HelpdeskPrioritiesBL.cs`, `Escalation/` | Priorisierung und Eskalationsstufen. |
| M-41 | Ticket-Zeiterfassung (Timer) | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerBL.cs`, `HelpdeskTimeRecordingBL.cs` | Erfassung von Arbeitszeiten je Ticket, inkl. Stoppuhr. |
| M-42 | Ticket-Unterschrift | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs` | Kundenunterschrift auf einem Zeiteintrag. |
| M-43 | Stundensatz-Aufschläge | `src/backend/Centron.BL/Sales/HourlySurchargeRatesBL/` | Zeitabhängige Zuschläge (Nacht, Wochenende) auf Stundensätze. |
| M-44 | Ticketvorlagen / Muster | `src/backend/Centron.BL/Sales/Support/HelpdeskPatternBL.cs`, `HelpdeskCreationTemplateBL.cs` | Automatische Ticketerzeugung aus Vorlagen. |
| M-45 | Ticketprozesse | `src/backend/Centron.BL/Sales/Support/TicketProcess/` | Mehrstufige Prozessvorlagen für Tickets. |
| M-46 | Ticketprojekte | `src/backend/Centron.BL/TicketProjects/TicketProjectBL.cs` | Bündelung von Tickets zu Projekten. |
| M-47 | Checklisten | `src/backend/Centron.BL/CheckListArea/` | Abarbeitbare Prüflisten an Tickets und Objekten. |
| M-48 | Taskmanagement | `src/backend/Centron.BL/TaskManager/`, `src/nexus/CentronNexus/Management/TaskManagement/` | Aufgabenverwaltung quer zu Tickets. |
| M-49 | RMA / Werkstatt | `src/backend/Centron.BL/CustomerArea/RmaBL.cs` | Retouren-, Reparatur- und Tauschabwicklung mit Seriennummern. |
| M-50 | Mail-Scanner | `src/backend/Centron.BL/MailScanner/MailScannerBL.cs` | Regelbasiertes Erzeugen/Zuordnen von Tickets aus Postfächern. |
| M-51 | Externer Helpdesk | `src/backend/Centron.BL/ExternalHelpdesk/` | Anbindung fremder Ticketsysteme. |
| M-52 | Erwartete Events | `src/backend/Centron.BL/ExpectedEvents/ExpectedEventsBL.cs` | Überwachung erwarteter, wiederkehrender Ereignisse. |
### 1.5 Warenwirtschaft und Logistik
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-53 | Artikelstamm | `src/backend/Centron.BL/Warehousing/ArticleBL.cs` | Zentrale Artikelverwaltung inklusive Sonderartikel-Rollen. |
| M-54 | Artikelimport | `src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleImportBL.cs` | Massenimport von Artikeldaten. |
| M-55 | Warengruppen | `src/backend/Centron.BL/Warehousing/InventoryManagement/MaterialGroupBL.cs` | Hierarchische Warengruppen mit Erlöskontozuordnung. |
| M-56 | Lager und Lagerplätze | `src/backend/Centron.BL/Warehousing/StockManagement/` | Lagerorte, Lagerplätze und Bestandsführung. |
| M-57 | Seriennummern und Barcodes | `src/backend/Centron.BL/Warehousing/BarcodeBL.cs`, `BarcodeHistoryBL.cs` | Einzelstückverfolgung über Barcode-/Seriennummernzustände. |
| M-58 | Inventur | `src/backend/Centron.BL/Warehousing/InventoryManagement/InventoryNewBL.cs` | Zähl- und Abschlussprozess der Inventur. |
| M-59 | Kommissionierung | `src/backend/Centron.BL/Warehousing/Commissions/` | Auftragsbezogene Kommissionierung, auch als Teilkommissionierung. |
| M-60 | Artikeleinheiten und Staffelpreise | `src/backend/Centron.BL/Warehousing/ArticleUnitBL.cs`, `ArticleVolumePricesBL.cs` | Mengeneinheiten und mengenabhängige Preise. |
| M-61 | Stücklisten / Produktfamilien | `src/backend/Centron.BL/Warehousing/StockManagement/PartListArticleBL.cs`, `ArticleManagement/ProductFamilyBL.cs` | Zusammengesetzte Artikel und Produktfamilien. |
| M-62 | Versandarten und Versanddienstleister | `src/backend/Centron.BL/Logistics/`, `src/apis/Centron.Api.Gls/`, `Centron.Api.Shipcloud/` | Versandsteuerung und Labelerzeugung. |
| M-63 | Aktionspreise | `src/backend/Centron.BL/Warehousing/ActionPriceBL.cs` | Zeitlich befristete Aktionspreise. |
### 1.6 Einkauf
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-64 | Lieferantenbelege | `src/backend/Centron.BL/Sales/Receipts/Supplier*/` | Anfragen, Bestellungen, Wareneingänge, Lieferantenrechnungen und -gutschriften. |
| M-65 | Bestellvorschlagsliste | `src/backend/Centron.BL/Purchasing/OrderSuggestionList/` | Ermittlung von Bestellvorschlägen aus Bedarf und Bestand. |
| M-66 | EDI-Beschaffung | `src/backend/Centron.BL/EDI/` | Elektronischer Datenaustausch mit Distributoren (ALSO, Alltron, Komsa, EGIS, Concerto). |
| M-67 | ZUGFeRD / XRechnung | `src/backend/Centron.BL/EDI/Zugferd/`, `docs/guides/development/xrechnung.md` | Elektronische Rechnungsformate im Ein- und Ausgang. |
| M-68 | ebInterface (AT) | `src/apis/Centron.Api.EbInterface/` | Österreichisches E-Rechnungsformat. |
| M-69 | Distributor-Produktdaten | `src/apis/Centron.APIs.ITscopeDataAccess/`, `IcecatDataAccess/`, `CopDataAccess/`, `EgisDataAccess/` | Bezug von Produktstamm-, Preis- und Verfügbarkeitsdaten. |
| M-70 | Bestellung pro Filiale | `src/backend/Centron.BL/Purchasing/SupplierOrderPerBranchBL.cs` | Filialbezogene Aufteilung von Bestellungen. |
### 1.7 Finanzen und Buchhaltung
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-71 | Buchhaltungsexport/-import | `src/backend/Centron.BL/DataExchange/BookKeeping/` | Übergabe von Belegdaten an die Finanzbuchhaltung (DATEV). |
| M-72 | Mahnwesen | `src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/` | Mahnläufe, Mahnstufen und Mahnbelege. |
| M-73 | Offene Posten (OPOS) | `src/backend/Centron.BL/Sales/Receipts/Invoices/Opos/` | Offene-Posten-Liste und Ausgleich. |
| M-74 | Zahlungseingang | `src/backend/Centron.BL/Finances/IncomingPayments/` | Erfassung und Protokollierung von Zahlungseingängen. |
| M-75 | SEPA-Mandate | `src/centron/Centron.WPF.UI/Modules/Administration/SepaContract/` | Verwaltung von SEPA-Lastschriftmandaten. |
| M-76 | Online-Banking | `src/backend/Centron.BL/Finances/OnlineBanking/`, `src/apis/Centron.APIs.FinAPI/` | Kontoumsatzabruf und Zahlungsverkehr über finAPI. |
| M-77 | Bankverbindungen | `src/backend/Centron.BL/Accounting/BankAccountBL.cs` | Bankstammdaten der Geschäftspartner. |
| M-78 | Kontenrahmen | `src/centron/Centron.WPF.UI/Modules/Warehousing/AccountSystems/` | Erlös- und Aufwandskonten je Mandant und Filiale. |
| M-79 | Mehrwertsteuer | `src/backend/Centron.BL/Warehousing/TaxBL.cs` | Steuersätze, Steuersatzketten und Steuersatzwechsel. |
| M-80 | Kostenstellen/Kostenträger | `src/backend/Centron.BL/Warehousing/CostCenterBL.cs`, `CostObjectBL.cs` | Kostenrechnerische Zuordnung. |
| M-81 | Kalkulation pro Filiale | `src/centron/Centron.WPF.UI/Modules/DataExchange/SupplierOrderPerBranch/` | Filialbezogene Kalkulation. |
| M-82 | Produkt-Lifecycle (PLM) | `src/backend/Centron.BL/Finances/ProductLifecycleBL.cs` | Lebenszyklus von Lizenz-/Produktbeständen beim Kunden. |
| M-83 | Gutschein-/Voucher-Verwaltung | `src/backend/Centron.BL/VoucherManagement/` | Ausgabe und Einlösung von Gutscheinen. |
### 1.8 Geräte, Assets, Monitoring
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-84 | Kunden-Assets | `src/backend/Centron.BL/Sales/CustomerAssets/AssetBL.cs`, `CustomerAssetBL.cs` | Beim Kunden installierte Wirtschaftsgüter. |
| M-85 | Stammblätter | `src/backend/Centron.BL/Sales/Receipts/…/MasterDataLists`, Tabelle `Stammdat` | Geräteblätter mit Seriennummer, Zählerstand und Rechnungsbezug. |
| M-86 | Account-Geräte | `src/backend/Centron.BL/Devices/AccountDeviceBL.cs`, Tabelle `AccountDevices` | Geräteverzeichnis am Account, verknüpfbar mit Tickets. |
| M-87 | Asset-Management / DocuBoard | `src/backend/Centron.BL/DocuBoard/`, Tabellen `AssetManagement*` | Inventarisierte IT-Systeme, SNMP-Checks und Monitoringergebnisse. |
| M-88 | RMM-Anbindung | `src/backend/Centron.BL/DataExchange/Rmm/`, `Controllers/v1/Integrations/RmmController.cs` | Anbindung von Remote-Monitoring-Systemen. |
| M-89 | docuFORM-Anbindung | `Centron.Api.docuFORM/`, `src/backend/Centron.BL/DataExchange/DocuForm/` | Auslesen von Druckerzählerständen. |
| M-90 | IT-Planner | `src/backend/Centron.BL/ItPlanner/` | Kategorisierung virtueller Objekte für Checklisten. |
### 1.9 Administration, Sicherheit, Betrieb
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-91 | Anmeldung und Authentifizierung | `src/backend/Centron.BL/Administration/Logins/Auth/` | Basic-, Active-Directory- und OpenID-Connect-Anmeldung. |
| M-92 | Zwei-Faktor-Authentifizierung | `src/backend/Centron.BL/Administration/Logins/TwoFactor/` | Zweiter Faktor per E-Mail oder RADIUS. |
| M-93 | Sitzungs-/Ticketverwaltung | `src/backend/Centron.BL/Administration/Logins/TicketBL.cs` | Ausgabe und Ablauf von Sitzungstickets. |
| M-94 | Rechteverwaltung | `src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs` | Benutzergruppen und rund 800 Einzelrechte. |
| M-95 | Web-Benutzerkonten | `src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs` | Kundenzugänge für das Webportal mit eigenem Rechtesystem. |
| M-96 | API-Zugriffstoken | `src/backend/Centron.BL/Administration/AccessTokens/` | Persönliche und administrative API-Token. |
| M-97 | Lizenzierung | `src/backend/Centron.BL/Administration/Licensing/LicenseManager.cs` | Freischaltung von Anwendungen und Einzelfunktionen über Lizenz-GUIDs. |
| M-98 | Mandanten und Filialen | `src/backend/Centron.BL/Administration/Company/` | Mandanten-, Filial- und Nummernkreisstruktur. |
| M-99 | Nummernkreise | `src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs` | Vergabe fortlaufender Belegnummern je Nummernart. |
| M-100 | Mitarbeiterverwaltung | `src/backend/Centron.BL/EmployeeArea/` | Mitarbeiter, Abteilungen, Skills, Urlaub, Mitarbeiterartikel. |
| M-101 | Anwendungseinstellungen | `src/backend/Centron.BL/Administration/Settings/` | Zentrale Konfigurationswerte (`ApplicationSettings`). |
| M-102 | Konfigurationsdatenbank | `src/backend/Centron.BL/Administration/CentronConfigDb/` | Übergreifende Konfiguration inkl. Hotline-Masterkey. |
| M-103 | DB-Skript-/Migrationsengine | `src/backend/Centron.BL/Administration/Scripts/ScriptEngineBL.cs` | Versionierte Datenbankmigration beim Start. |
| M-104 | SQL-Manager | `src/backend/Centron.BL/Administration/SQLManagement/` | Administrative SQL-Ausführung aus der Anwendung. |
| M-105 | Datenschutz (DSGVO) | `src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs` | Auskunft, Löschung und Datenbankbereinigung. |
| M-106 | Passwort-Manager | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs` | Verschlüsselte Ablage von Kundenzugangsdaten. |
| M-107 | Passwortverwaltung (Altmodul) | `src/backend/Centron.BL/PasswordManagementArea/` | Vorgängermodul der Zugangsdatenverwaltung. |
| M-108 | Änderungshistorie | `src/backend/Centron.BL/ChangeTracking/History/` | Feldbezogene Änderungsverfolgung. |
| M-109 | Massenupdate | `src/backend/Centron.BL/MassUpdate/MassUpdateBL.cs` | Feldänderungen über viele Datensätze hinweg. |
| M-110 | Customizing / Custom Properties | `src/backend/Centron.BL/Customizations/`, `Modules/` | Kundenindividuelle Zusatzfelder und Tabellen. |
| M-111 | Telemetrie | `src/backend/Centron.BL/Telemetry/TelemetryBL.cs` | Nutzungszählung von API- und KI-Werkzeugen. |
| M-112 | Protokollierung / LogViewer | `src/centron/Centron.WPF.UI/nlog.config`, `Modules/Administration/LogViewer/` | Anwendungsprotokollierung und Protokollansicht. |
| M-113 | Deployment und Container | `docker/`, `deployment/`, `azure/` | Auslieferung als Windows-Installer und Linux-Container. |
| M-114 | Build- und Testpipeline | `.github/workflows/`, `azure/*.yml`, `tests/` | Automatisierte Übersetzung, Signierung und Prüfung. |
| M-115 | Datenqualitätsdienst | `src/backend/Centron.BL/Services/DataQuality/`, `docs/Background Service/DataQualityService.md` | Periodische Konsistenzprüfungen im Hintergrund. |
### 1.10 Ausgabe, Kommunikation, Suche
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-116 | Report-Engine | `src/backend/Centron.BL/ReportEngine/` | Formulargenerierung (FastReport) und PDF-Export. |
| M-117 | Reportverwaltung | `src/centron/Centron.WPF.UI/Modules/Reports/ReportManagement/` | Verwaltung der Formularvorlagen und Reportgruppen. |
| M-118 | Reportserver | `src/centron/Centron.WPF.UI/Modules/Administration/ReportServer/` | Zeitgesteuerter Reportversand. |
| M-119 | PDF-Signatur | `src/backend/Centron.BL/Security/PdfSigningBL.cs` | Digitale Signatur erzeugter PDF-Dokumente. |
| M-120 | Mailversand und Vorlagen | `src/backend/Centron.BL/Mail/` | SMTP/Exchange-Versand, Mailvorlagen, Variablenersetzung. |
| M-121 | Textbausteine | `src/backend/Centron.BL/TextModuleArea/` | Wiederverwendbare Textblöcke in Belegen und Mails. |
| M-122 | Kalender und Terminplanung | `src/backend/Centron.BL/Calendar/CalendarBL.cs`, `Mail/Exchange/` | Termine und Exchange-Synchronisation. |
| M-123 | Terminanfragen | `src/backend/Centron.BL/AppointmentRequests/` | Terminvorschläge an Kunden. |
| M-124 | Telefonie / TAPI | `src/backend/Centron.BL/Tapi/PhoneCallBL.cs`, `docs/reference/architecture/tapi.md` | Anrufprotokollierung und Rufnummernauflösung. |
| M-125 | Volltext-Indexsuche | `src/backend/Centron.BL/IndexSearch/` | Objektübergreifende Volltextsuche mit eigenem Index. |
| M-126 | Dokumentenverwaltung | `src/backend/Centron.BL/Administration/FileManagement/` | Verzeichnisstruktur und Dokumentenablage je Objekt. |
| M-127 | Benachrichtigungen | `src/backend/Centron.BL/Notifications/`, `NexusNotifications/` | Push- und In-App-Benachrichtigungen. |
| M-128 | Chats | `src/backend/Centron.BL/Chats/ChatBL.cs` | Interne Kurznachrichten. |
| M-129 | Tags | `src/backend/Centron.BL/Tags/TagsBL.cs` | Freie Verschlagwortung von Objekten. |
| M-130 | Web-Links / Kurz-URLs | `src/backend/Centron.BL/Urls/`, `WebLinks/` | Signierte Kurzlinks mit hinterlegter Aktion. |
| M-131 | Dokumentationsbereich | `src/backend/Centron.BL/DocumentationArea/` | Strukturierte Kundendokumentation. |
| M-132 | Social Media | `src/backend/Centron.BL/SocialMedia/` | Anbindung sozialer Netzwerke. |
| M-133 | Videoportal | `src/backend/Centron.BL/VideoPortal/` | Zuordnung von Schulungsvideos. |
### 1.11 Web-Oberflächen (c-entron Nexus) und Clients
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-134 | Nexus ServiceBoard | `src/nexus/CentronNexus/ServiceBoard/` | Webbasierte Ticketbearbeitung inkl. Kanban und Planung. |
| M-135 | Nexus Kundenportal / WebCart | `src/nexus/CentronNexus/WebCart/` | Kundenportal mit Shop, Belegen, Tickets und Formularen. |
| M-136 | Nexus WebOffer | `src/nexus/CentronNexus/WebOffer/` | Belegansicht und -freigabe durch den Kunden. |
| M-137 | Nexus Dokumentensignatur | `src/nexus/CentronNexus/DocumentSigning/`, `Office/` | Unterzeichnung und geteilte Dokumente. |
| M-138 | Nexus Management | `src/nexus/CentronNexus/Management/` | Verwaltung von Tasks, Ticketmustern und Web-Konten im Web. |
| M-139 | Nexus Einstellungen/Branding | `src/nexus/CentronNexus/Settings/` | Mandantenspezifisches Erscheinungsbild und Konfiguration. |
| M-140 | Outlook-Add-In | `src/nexus/CentronNexus.OutlookAddIn/` | Zugriff auf Kunden, Belege und Tickets aus Outlook. |
| M-141 | Self-Care-Formulare | `src/backend/Centron.BL/SelfCare/`, `Controllers/v1/SelfCare/` | Vom Kunden ausfüllbare Formulare zur Ticketerzeugung. |
| M-142 | WPF-Rich-Client | `src/centron/Centron.WPF.UI/` | Hauptbedienoberfläche mit Modulregistrierung und Ribbon. |
| M-143 | Gemeinsame Steuerelemente | `src/shared/Centron.Controls/`, `Centron.Core/` | Wiederverwendete UI-Bausteine und Kernbibliothek. |
| M-144 | Mobile-Anbindung | `src/backend/Centron.BL/Mobile/MobileBL.cs` | Datenversorgung mobiler Clients. |
### 1.12 Schnittstellen, Auswertung, Sonstiges
| ID | Modul / Komponente | Pfad | Fachliche Aufgabe |
|---|---|---|---|
| M-145 | Webservice-Host und REST-API | `src/webservice/`, `src/webservice/Centron.Controllers/` | Versionierte REST-Schnittstelle und Hosting als Dienst/Konsole. |
| M-146 | Verbindungsverwaltung | `src/webservice/c-entron.misc.ConnectionManager/`, `Centron.BL/Administration/Connections/` | Verwaltung der Datenbank- und Webserviceverbindungen. |
| M-147 | Statistiken und Auswertungen | `src/backend/Centron.BL/Statistics/` | Umsatz-, Ticket-, Vertrags- und MSP-Statistiken. |
| M-148 | MSP-Collector | `src/centron/Centron.WPF.UI/Modules/Statistics/MspCollectors/` | Einsammeln von Lizenz-/Nutzungsdaten für MSP-Abrechnung. |
| M-149 | Management-Info und Dashboard | `src/centron/Centron.WPF.UI/Modules/Statistics/ManagementInfo/`, `MyCentron/Dashboard/` | Verdichtete Kennzahlen für Führungskräfte. |
| M-150 | Mein Tag (MyDay) | `src/backend/Centron.BL/MyDay/` | Persönliche Tagesplanung und Zeitübersicht. |
| M-151 | Todo-Liste | `src/backend/Centron.BL/ToDoArea/ToDoBL.cs` | Persönliche und objektbezogene Aufgaben. |
| M-152 | KI-Assistent | `src/backend/Centron.BL/ArtificialIntelligence/` | Chat, Textbewertung und Ticketkategorisierung über LLM-APIs. |
| M-153 | Externe Werkzeuge / Fernwartung | `src/backend/Centron.BL/ExternalToolsBL/`, `MyDay/Supremo.cs` | Start externer Programme und Fernwartungssitzungen. |
| M-154 | TradePool | `src/backend/Centron.BL/TradePool/` | Handelsplattform-Anbindung. |
| M-155 | RiverSuite/RiverDivo-Anbindung | `src/backend/Centron.BL/RiverDivo/` | Anbindung der RiverSuite-Produktlinie. |
| M-156 | CPra-Konnektor | `src/backend/Centron.BL/CPra/` | Anbindung des Fremdsystems CPra. |
| M-157 | Telekom Dive | `src/backend/Centron.BL/DataExchange/TelekomDive/` | Anbindung des Telekom-Dive-Portals. |
| M-158 | GFK-Export | `src/backend/Centron.BL/DataExchange/GfkExport/` | Marktforschungsdatenexport. |
| M-159 | Objekt-Externreferenzen | `src/backend/Centron.BL/ObjectExternalReferences/` | Verknüpfung interner Objekte mit Fremdsystem-IDs. |
| M-160 | Zahlungsverkehrsdateien | `src/backend/Centron.BL/DataExchange/PaymentTransactions/` | Erzeugung von Zahlungsverkehrsdateien. |
| M-161 | Produktion | `src/backend/Centron.BL/Production/` | Produktionsaufträge und Maschinenverwaltung. |
| M-162 | Datenimport (generisch) | `src/backend/Centron.BL/DataExchange/Import/`, `Entities/Import/` | Generische Importwege für Fremddaten. |
| M-163 | Gateway | `src/backend/Centron.BL/Gateway/`, `src/backend/Centron.Gateway/` | Vermittlungsschicht für externe Aufrufe. |
| M-164 | Länderverwaltung | `src/backend/Centron.BL/CountryArea/` | Länder, Bundesländer und länderabhängige Steuersätze. |
| M-165 | Themes und Oberflächenanpassung | `src/centron/Centron.WPF.UI/Style/`, `Controllers/v1/Administration/ThemesController.cs` | Farbschemata und Layoutanpassungen. |
**Inventarumfang: 165 Module/Komponenten.**
Die Abdeckungstabelle in Abschnitt 3 führt jede dieser 165 Zeilen mit Einstufung und Anforderungszahl.
Abschnitt 4 enthält den Konsistenzcheck, Abschnitt 5 die Selbstbewertung.
---
## 2. Vorgehen im Lauf
| Schritt | Umsetzung |
|---|---|
| **0 — Modulinventar** | Vor der ersten Anforderung erstellt (Abschnitt 1), 165 Einträge. Grundlage: `ModuleRegistration.cs` (84 registrierte UI-Module), Verzeichnisstruktur von `Centron.BL`, `Centron.Entities`, `src/apis`, `src/nexus`, `src/webservice`, Betriebsartefakte. |
| **0b — Mindestabdeckung** | Jedes Inventarmodul hat mindestens eine Anforderung (Abschnitt 3). Kein Modul steht auf `nicht analysiert`. |
| **0c — Vertiefung nach Risiko** | Vertieft wurden zuerst Berechtigungen (`AppRightsBL`, `UserRightsConst`, die vier Prüfmethoden in `ReceiptBL`), Anmeldung und Kennwortbehandlung (`Authenticator`, `BasicAuthenticator`, `SHA1Decoder`, `AESCryptoLogic`, `AccessTokenBL`, `WebAccountBL`), Abrechnung und Fakturierung (`ReceiptBL.SaveReceipt`/`ForwardReceipt`, `InvoiceSpecificLogic`, `DunningRunBL`, `AutomaticFacturaBL`, `TimerBillingBL`, `TaxBL`, `NumberGroupBL`) sowie Datenschutz (`DataSecurityBL`). |
| **2 — Artefakterhebung** | Quellcode, DB-Schema-Dump (1.558 Tabellen), Rechtekonstanten, Modulregistrierung, Ressourcendateien, `docs/` (54 Dateien), `CentronRights.md`, `README.md`, `docker/`, `azure/`, `.github/workflows/`. **Nicht erhoben:** Commit-Historie und Ticketreferenzen — das Arbeitsverzeichnis enthält kein Git-Repository der analysierten Codebasis, sondern nur den Dateibestand. |
| **3 — Technische Analyse** | Module, Abhängigkeiten, Statusmaschinen (`BarcodeState`, `DunningLevel`, `RmaArticleState`, Zeiterfassung), Validierungslogik (`SaveReceipt`, `HelpdeskBL.DoValidateMandatoryFields`), Berechtigungsprüfungen. |
| **4 — Semantische Interpretation** | Trennung in `Fakt` (belegte Beobachtung) und `Aussage` (fachliche Soll-Aussage) in jedem Anforderungsblock. |
| **5 — Formalisierung** | 363 Anforderungen im vorgegebenen Blockformat mit Vorbedingung, Ergebnis und Prüfidee. |
| **6 — Traceability-Anreicherung** | 740 Artefaktbelege; `Traceability.md` mit 319 Zeilen, maschinell aus den `Tracelinks`- und `Belege`-Feldern erzeugt. |
**Nicht durchgeführt:** Ausführung des Systems, Datenbankzugriff, Debugging, Einsatz zusätzlicher
Analysewerkzeuge. Alle Aussagen stammen aus dem Lesen und Durchsuchen der Dateien.
---
## 3. Abdeckungstabelle
Einstufung: `tief` ≥ 8 Anforderungen, `mittel` 4–7, `flach` 1–3, `nicht analysiert` 0.
Die Zuordnung Modul → Anforderung wurde maschinell erzeugt, indem die Belege und der Text jeder
Anforderung gegen die Pfad- und Bezeichnerschlüssel des jeweiligen Moduls geprüft wurden. Bei
fünfzehn Modulen überzeichnet diese Suche das Ergebnis, weil kurze Schlüssel auch fremde Begriffe
treffen (`Kunden` in „Kundenstamm", `Mandat` in „Mandant", `Voucher` in „CreditVoucher", `EDI` in
`EDIT_INVOICE`, `Employee`, `Signature`, `Exchange`, `Monitoring`). Für diese Module ist der nach
Durchsicht verbleibende Wert eingetragen und der Rohwert in der letzten Spalte vermerkt.
| Modul-ID | Modul | Einstufung | Anzahl Anforderungen | Anforderungs-IDs |
|---|---|---|---|---|
| M-01 | Belegkern | tief | 75 | StRS-003, StRS-004, StRS-005, StRS-012, StRS-013, StRS-023, StRS-028, StRS-030, StRS-032, StRS-034, StRS-038, StRS-040, StRS-045, StRS-051, StRS-058, SwRS-003, SwRS-009, SwRS-010, … (+57) |
| M-02 | Angebote | tief | 12 | StRS-003, StRS-004, SwRS-005, SwRS-012, SwRS-023, SwRS-024, SwRS-191, SyRS-012, SyRS-014, SyRS-015, SyRS-022, SyRS-023 |
| M-03 | Aufträge | mittel | 6 | StRS-030, StRS-040, SwRS-005, SwRS-083, SyRS-022, SyRS-113 |
| M-04 | Lieferscheine | mittel | 6 | StRS-009, StRS-024, SwRS-005, SwRS-070, SyRS-022, SyRS-032 |
| M-05 | Rechnungen | tief | 21 | StRS-005, StRS-028, StRS-029, StRS-040, SwRS-005, SwRS-013, SwRS-014, SwRS-021, SwRS-022, SwRS-082, SwRS-083, SwRS-090, SyRS-013, SyRS-014, SyRS-020, SyRS-021, SyRS-022, SyRS-082, SyRS-083, SyRS-113, SyRS-183 |
| M-06 | Gutschriften | mittel | 7 | StRS-006, StRS-024, StRS-040, SwRS-005, SwRS-027, SwRS-070, SyRS-113 |
| M-07 | Abholscheine | flach | 2 | StRS-007, SwRS-005 |
| M-08 | Belegpositionen | flach | 1 | SyRS-005 |
| M-09 | Belegvorlagen | flach | 2 | SwRS-016, SyRS-016 |
| M-10 | Belegprotokoll/Progression | mittel | 6 | StRS-051, SwRS-023, SwRS-024, SwRS-154, SyRS-023, SyRS-154 |
| M-11 | Belegkonditionen | flach | 2 | SwRS-017, SyRS-017 |
| M-12 | Web-Beleg | flach | 3 | StRS-045, SwRS-123, SyRS-123 |
| M-13 | Belegsignatur | mittel | 4 | StRS-045, SwRS-124, SyRS-123, SyRS-124 |
| M-14 | Provisionsabrechnung | mittel | 4 | StRS-003, StRS-013, SwRS-084, SyRS-034 |
| M-15 | Sonderpreise/Produktmatrix | mittel | 4 | StRS-044, SwRS-197, SyRS-004, SyRS-005 |
| M-16 | Frachtartikel-Steuerung | flach | 3 | SwRS-065, SyRS-011, SyRS-064 |
| M-17 | Verträge (Kern) | tief | 11 | StRS-008, SwRS-017, SwRS-018, SwRS-030, SwRS-084, SwRS-140, SyRS-018, SyRS-030, SyRS-031, SyRS-085, SyRS-140 |
| M-18 | Automatische Vertragsabrechnung | mittel | 7 | StRS-009, SwRS-032, SwRS-033, SwRS-088, SyRS-032, SyRS-033, SyRS-165 |
| M-19 | Klickabrechnung | mittel | 4 | StRS-010, StRS-049, SwRS-140, SyRS-140 |
| M-20 | Pauschalabrechnung | mittel | 5 | StRS-011, SwRS-031, SwRS-102, SyRS-031, SyRS-064 |
| M-21 | Vereinfachte Ticketabrechnung | mittel | 4 | StRS-012, SwRS-035, SwRS-180, SyRS-035 |
| M-22 | Vertragsarten | flach | 1 | SwRS-193 |
| M-23 | Vertragsauswertung | flach | 3 | StRS-054, SwRS-170, SwRS-190 |
| M-24 | Vertrags-Datenimport | mittel | 4 | SwRS-033, SwRS-088, SwRS-197, SyRS-033 |
| M-25 | Leasing/Service | flach | 1 | SwRS-191 |
| M-26 | Adressstamm/Accounts | tief | 13 | StRS-001, StRS-044, SwRS-053, SwRS-080, SwRS-120, SwRS-122, SwRS-199, SyRS-001, SyRS-002, SyRS-080, SyRS-085, SyRS-120, SyRS-122 |
| M-27 | Alt-Kundenstamm | tief | 66 | StRS-001, StRS-002, StRS-013, StRS-015, StRS-016, StRS-030, StRS-033, StRS-035, StRS-043, StRS-044, StRS-045, StRS-047, StRS-049, StRS-058, StRS-059, StRS-060, SwRS-011, SwRS-016, … (+48) |
| M-28 | Lieferantenstamm | mittel | 5 | StRS-001, StRS-035, SwRS-075, SyRS-002, SyRS-095 |
| M-29 | Adressen und Ansprechpartner | tief | 10 | StRS-050, SwRS-004, SwRS-018, SwRS-122, SwRS-140, SwRS-150, SyRS-002, SyRS-003, SyRS-014, SyRS-150 |
| M-30 | CRM-Aktivitäten | mittel | 4 | SwRS-183, SwRS-207, SyRS-002, SyRS-183 |
| M-31 | CRM-Projekte | flach | 2 | SwRS-192, SwRS-195 |
| M-32 | Kampagnen und Mailings | flach | 1 | StRS-057 |
| M-33 | Audit/Umfragen | flach | 3 | SwRS-056, SwRS-203, SyRS-056 |
| M-34 | Lieferantenverträge | flach | 1 | SwRS-193 |
| M-35 | Kundenhotline/Zugangsdaten | mittel | 7 | StRS-047, StRS-048, SwRS-107, SwRS-130, SwRS-131, SwRS-132, SyRS-130 |
| M-36 | Geschäftsbereiche/Interessen | flach | 1 | SwRS-194 |
| M-37 | Helpdesk (Ticketkern) | tief | 15 | StRS-016, StRS-017, SwRS-050, SwRS-051, SwRS-052, SwRS-053, SwRS-054, SwRS-057, SwRS-121, SwRS-129, SwRS-203, SyRS-050, SyRS-051, SyRS-052, SyRS-053 |
| M-38 | Ticketabschluss | tief | 17 | StRS-046, SwRS-004, SwRS-007, SwRS-054, SwRS-055, SwRS-056, SwRS-057, SwRS-112, SwRS-203, SwRS-211, SyRS-050, SyRS-054, SyRS-055, SyRS-056, SyRS-128, SyRS-165, SyRS-183 |
| M-39 | Ticketkategorien/-typen/-status | mittel | 4 | StRS-016, SwRS-054, SyRS-054, SyRS-058 |
| M-40 | Prioritäten/Eskalation | flach | 2 | StRS-016, SyRS-057 |
| M-41 | Ticket-Zeiterfassung | tief | 12 | StRS-014, SwRS-036, SwRS-040, SwRS-041, SwRS-043, SwRS-182, SyRS-035, SyRS-036, SyRS-040, SyRS-041, SyRS-042, SyRS-182 |
| M-42 | Ticket-Unterschrift | tief | 12 | StRS-015, StRS-040, StRS-045, SwRS-035, SwRS-040, SwRS-042, SwRS-043, SwRS-107, SwRS-110, SwRS-112, SyRS-012, SyRS-124 |
| M-43 | Stundensatz-Aufschläge | flach | 2 | SwRS-036, SyRS-036 |
| M-44 | Ticketvorlagen/Muster | mittel | 4 | SwRS-058, SwRS-125, SyRS-058, SyRS-125 |
| M-45 | Ticketprozesse | flach | 1 | SwRS-195 |
| M-46 | Ticketprojekte | flach | 1 | SwRS-195 |
| M-47 | Checklisten | mittel | 4 | StRS-019, SwRS-058, SwRS-202, SyRS-058 |
| M-48 | Taskmanagement | flach | 2 | StRS-020, StRS-046 |
| M-49 | RMA/Werkstatt | mittel | 5 | StRS-018, SwRS-060, SyRS-054, SyRS-055, SyRS-060 |
| M-50 | Mail-Scanner | flach | 2 | StRS-041, SwRS-113 |
| M-51 | Externer Helpdesk | flach | 2 | SwRS-175, SwRS-196 |
| M-52 | Erwartete Events | flach | 2 | SwRS-179, SyRS-179 |
| M-53 | Artikelstamm | tief | 15 | StRS-011, SwRS-027, SwRS-031, SwRS-065, SwRS-066, SwRS-067, SwRS-143, SwRS-181, SwRS-200, SyRS-004, SyRS-031, SyRS-064, SyRS-065, SyRS-181, SyRS-182 |
| M-54 | Artikelimport | mittel | 4 | SwRS-067, SwRS-197, SyRS-004, SyRS-033 |
| M-55 | Warengruppen | mittel | 5 | StRS-027, SyRS-007, SyRS-009, SyRS-064, SyRS-080 |
| M-56 | Lager und Lagerplätze | flach | 1 | StRS-021 |
| M-57 | Seriennummern und Barcodes | tief | 11 | StRS-018, StRS-021, StRS-049, SwRS-060, SwRS-061, SwRS-067, SwRS-140, SyRS-010, SyRS-060, SyRS-061, SyRS-140 |
| M-58 | Inventur | mittel | 7 | StRS-021, StRS-022, SwRS-062, SwRS-063, SwRS-140, SyRS-009, SyRS-062 |
| M-59 | Kommissionierung | mittel | 7 | StRS-023, SwRS-012, SwRS-064, SwRS-102, SyRS-012, SyRS-018, SyRS-063 |
| M-60 | Artikeleinheiten/Staffelpreise | flach | 3 | SyRS-004, SyRS-005, SyRS-066 |
| M-61 | Stücklisten/Produktfamilien | flach | 3 | SwRS-066, SwRS-067, SyRS-065 |
| M-62 | Versandarten/Dienstleister | flach | 3 | SwRS-068, SwRS-069, SyRS-067 |
| M-63 | Aktionspreise | flach | 2 | SyRS-004, SyRS-005 |
| M-64 | Lieferantenbelege | flach | 3 | StRS-024, SwRS-070, SwRS-193 |
| M-65 | Bestellvorschlagsliste | flach | 2 | SwRS-075, SyRS-075 |
| M-66 | EDI-Beschaffung | tief | 19 | StRS-016, StRS-025, StRS-026, StRS-032, SwRS-029, SwRS-051, SwRS-071, SwRS-072, SwRS-087, SwRS-109, SyRS-001, SyRS-020, SyRS-051, SyRS-071, SyRS-072, SyRS-109, SyRS-111, SyRS-178, SyRS-182 |
| M-67 | ZUGFeRD/XRechnung | flach | 2 | StRS-026, SwRS-072 |
| M-68 | ebInterface | flach | 1 | StRS-026 |
| M-69 | Distributor-Produktdaten | mittel | 4 | SwRS-073, SwRS-074, SyRS-073, SyRS-074 |
| M-70 | Bestellung pro Filiale | flach | 3 | SwRS-076, SwRS-199, SyRS-076 |
| M-71 | Buchhaltungsexport/-import | mittel | 5 | StRS-027, SwRS-080, SwRS-087, SyRS-009, SyRS-080 |
| M-72 | Mahnwesen | tief | 8 | StRS-028, StRS-029, StRS-030, SwRS-082, SwRS-083, SyRS-082, SyRS-083, SyRS-084 |
| M-73 | Offene Posten (OPOS) | flach | 1 | StRS-028 |
| M-74 | Zahlungseingang | flach | 2 | SwRS-086, SyRS-087 |
| M-75 | SEPA-Mandate | tief | 8 | StRS-003, StRS-034, SwRS-050, SwRS-084, SwRS-093, SyRS-050, SyRS-085, SyRS-093 |
| M-76 | Online-Banking | flach | 2 | SwRS-085, SyRS-086 |
| M-77 | Bankverbindungen | flach | 1 | SyRS-085 |
| M-78 | Kontenrahmen | flach | 3 | SwRS-080, SwRS-199, SyRS-080 |
| M-79 | Mehrwertsteuer | mittel | 6 | SwRS-007, SwRS-008, SwRS-009, SyRS-006, SyRS-007, SyRS-008 |
| M-80 | Kostenstellen/Kostenträger | flach | 3 | StRS-027, SwRS-194, SwRS-198 |
| M-81 | Kalkulation pro Filiale | flach | 1 | SwRS-199 |
| M-82 | Produkt-Lifecycle (PLM) | flach | 2 | SwRS-102, SyRS-089 |
| M-83 | Gutschein-/Voucher-Verwaltung | tief | 10 | StRS-006, StRS-024, StRS-040, SwRS-005, SwRS-027, SwRS-065, SwRS-070, SwRS-200, SyRS-064, SyRS-113 |
| M-84 | Kunden-Assets | tief | 18 | StRS-008, StRS-009, StRS-012, StRS-049, SwRS-013, SwRS-032, SwRS-033, SwRS-035, SwRS-057, SwRS-088, SwRS-140, SwRS-143, SwRS-180, SyRS-003, SyRS-030, SyRS-032, SyRS-033, SyRS-140 |
| M-85 | Stammblätter | tief | 11 | StRS-010, StRS-049, SwRS-017, SwRS-018, SwRS-140, SwRS-176, SwRS-198, SwRS-201, SyRS-001, SyRS-140, SyRS-176 |
| M-86 | Account-Geräte | mittel | 4 | StRS-049, SwRS-141, SyRS-002, SyRS-140 |
| M-87 | Asset-Management/DocuBoard | tief | 8 | StRS-049, StRS-062, SwRS-030, SwRS-142, SwRS-161, SyRS-030, SyRS-100, SyRS-140 |
| M-88 | RMM-Anbindung | mittel | 4 | StRS-062, SwRS-087, SwRS-175, SyRS-175 |
| M-89 | docuFORM-Anbindung | mittel | 5 | StRS-010, StRS-062, SwRS-087, SwRS-175, SwRS-201 |
| M-90 | IT-Planner | flach | 1 | SwRS-202 |
| M-91 | Anmeldung/Authentifizierung | tief | 15 | StRS-033, StRS-037, StRS-061, SwRS-003, SwRS-103, SwRS-104, SwRS-105, SwRS-106, SwRS-165, SyRS-102, SyRS-104, SyRS-105, SyRS-106, SyRS-107, SyRS-165 |
| M-92 | Zwei-Faktor-Authentifizierung | flach | 3 | SwRS-003, SwRS-104, SyRS-105 |
| M-93 | Sitzungs-/Ticketverwaltung | tief | 11 | StRS-033, StRS-037, SwRS-100, SwRS-101, SwRS-121, SyRS-100, SyRS-101, SyRS-103, SyRS-104, SyRS-105, SyRS-106 |
| M-94 | Rechteverwaltung | tief | 37 | StRS-006, StRS-007, StRS-017, StRS-022, StRS-024, StRS-028, StRS-031, StRS-032, StRS-050, StRS-054, StRS-056, SwRS-006, SwRS-090, SwRS-095, SwRS-109, SwRS-142, SwRS-192, SwRS-208, … (+19) |
| M-95 | Web-Benutzerkonten | tief | 15 | StRS-017, StRS-033, StRS-044, SwRS-053, SwRS-100, SwRS-101, SwRS-120, SwRS-121, SwRS-122, SwRS-126, SwRS-173, SyRS-051, SyRS-120, SyRS-121, SyRS-122 |
| M-96 | API-Zugriffstoken | mittel | 6 | SwRS-085, SwRS-102, SwRS-108, SwRS-109, SyRS-086, SyRS-109 |
| M-97 | Lizenzierung | tief | 22 | StRS-011, StRS-036, StRS-037, StRS-056, StRS-057, SwRS-034, SwRS-088, SwRS-101, SwRS-102, SwRS-103, SwRS-109, SwRS-160, SwRS-177, SwRS-192, SwRS-193, SyRS-018, SyRS-089, SyRS-103, SyRS-104, SyRS-109, SyRS-170, SyRS-178 |
| M-98 | Mandanten und Filialen | tief | 21 | StRS-003, StRS-017, StRS-027, StRS-032, StRS-034, SwRS-050, SwRS-059, SwRS-076, SwRS-080, SwRS-092, SwRS-093, SwRS-194, SwRS-199, SyRS-009, SyRS-020, SyRS-050, SyRS-076, SyRS-080, SyRS-092, SyRS-093, SyRS-126 |
| M-99 | Nummernkreise | tief | 13 | StRS-007, StRS-018, StRS-034, StRS-035, StRS-043, SwRS-093, SwRS-094, SwRS-095, SwRS-192, SyRS-093, SyRS-094, SyRS-095, SyRS-115 |
| M-100 | Mitarbeiterverwaltung | tief | 19 | StRS-013, StRS-029, StRS-032, StRS-050, StRS-051, StRS-061, SwRS-003, SwRS-041, SwRS-082, SwRS-093, SwRS-170, SwRS-181, SwRS-182, SyRS-041, SyRS-092, SyRS-093, SyRS-130, SyRS-181, SyRS-182 |
| M-101 | Anwendungseinstellungen | flach | 1 | SwRS-203 |
| M-102 | Konfigurationsdatenbank | mittel | 4 | StRS-047, SwRS-107, SwRS-131, SyRS-130 |
| M-103 | DB-Skript-/Migrationsengine | mittel | 6 | StRS-053, SwRS-161, SwRS-162, SyRS-161, SyRS-162, SyRS-165 |
| M-104 | SQL-Manager | flach | 2 | SwRS-177, SyRS-177 |
| M-105 | Datenschutz (DSGVO) | tief | 8 | StRS-050, SwRS-023, SwRS-150, SwRS-151, SwRS-152, SyRS-150, SyRS-151, SyRS-152 |
| M-106 | Passwort-Manager | tief | 8 | StRS-047, StRS-048, StRS-059, SwRS-107, SwRS-130, SwRS-131, SwRS-132, SyRS-130 |
| M-107 | Passwortverwaltung (Altmodul) | mittel | 4 | StRS-047, StRS-048, SyRS-130, SyRS-131 |
| M-108 | Änderungshistorie | tief | 17 | StRS-018, StRS-019, StRS-020, StRS-021, StRS-044, StRS-051, SwRS-040, SwRS-057, SwRS-060, SwRS-067, SwRS-153, SwRS-154, SyRS-040, SyRS-054, SyRS-060, SyRS-153, SyRS-154 |
| M-109 | Massenupdate | flach | 2 | SwRS-176, SyRS-176 |
| M-110 | Customizing/Custom Properties | mittel | 4 | StRS-047, StRS-059, SwRS-130, SyRS-130 |
| M-111 | Telemetrie | flach | 3 | StRS-056, SwRS-167, SyRS-167 |
| M-112 | Protokollierung/LogViewer | mittel | 4 | SwRS-105, SwRS-165, SyRS-106, SyRS-165 |
| M-113 | Deployment und Container | flach | 3 | StRS-052, SwRS-160, SyRS-160 |
| M-114 | Build- und Testpipeline | mittel | 6 | SwRS-163, SwRS-164, SwRS-211, SyRS-073, SyRS-163, SyRS-164 |
| M-115 | Datenqualitätsdienst | flach | 3 | SwRS-111, SwRS-166, SyRS-166 |
| M-116 | Report-Engine | mittel | 6 | StRS-038, SwRS-028, SwRS-110, SwRS-178, SwRS-206, SyRS-110 |
| M-117 | Reportverwaltung | mittel | 6 | StRS-038, SwRS-110, SwRS-178, SwRS-206, SyRS-110, SyRS-178 |
| M-118 | Reportserver | flach | 1 | SyRS-178 |
| M-119 | PDF-Signatur | flach | 1 | SyRS-124 |
| M-120 | Mailversand und Vorlagen | tief | 14 | StRS-040, StRS-041, StRS-042, StRS-045, StRS-057, SwRS-053, SwRS-058, SwRS-112, SwRS-113, SwRS-114, SwRS-124, SyRS-113, SyRS-114, SyRS-124 |
| M-121 | Textbausteine | flach | 2 | StRS-058, SwRS-015 |
| M-122 | Kalender und Terminplanung | tief | 18 | StRS-027, StRS-040, StRS-042, StRS-062, SwRS-076, SwRS-087, SwRS-112, SwRS-114, SwRS-173, SwRS-175, SwRS-196, SwRS-197, SwRS-199, SwRS-201, SwRS-214, SyRS-076, SyRS-088, SyRS-181 |
| M-123 | Terminanfragen | flach | 1 | SwRS-204 |
| M-124 | Telefonie/TAPI | flach | 3 | StRS-043, SwRS-115, SyRS-115 |
| M-125 | Volltext-Indexsuche | mittel | 5 | StRS-055, SwRS-023, SwRS-171, SyRS-023, SyRS-171 |
| M-126 | Dokumentenverwaltung | mittel | 7 | StRS-039, StRS-045, SwRS-111, SwRS-124, SyRS-111, SyRS-123, SyRS-124 |
| M-127 | Benachrichtigungen | mittel | 7 | StRS-046, SwRS-041, SwRS-126, SwRS-128, SwRS-205, SyRS-041, SyRS-128 |
| M-128 | Chats | flach | 1 | SwRS-205 |
| M-129 | Tags | flach | 1 | SwRS-206 |
| M-130 | Web-Links/Kurz-URLs | flach | 1 | SwRS-207 |
| M-131 | Dokumentationsbereich | flach | 1 | SwRS-208 |
| M-132 | Social Media | flach | 1 | SwRS-209 |
| M-133 | Videoportal | flach | 1 | SwRS-210 |
| M-134 | Nexus ServiceBoard | tief | 10 | StRS-046, SwRS-059, SwRS-101, SwRS-102, SwRS-141, SwRS-182, SwRS-215, SyRS-057, SyRS-059, SyRS-115 |
| M-135 | Nexus Kundenportal/WebCart | mittel | 6 | StRS-044, SwRS-025, SwRS-125, SwRS-126, SyRS-004, SyRS-125 |
| M-136 | Nexus WebOffer | flach | 1 | SyRS-123 |
| M-137 | Nexus Dokumentensignatur | flach | 3 | StRS-045, SwRS-124, SyRS-124 |
| M-138 | Nexus Management | mittel | 5 | StRS-020, SwRS-058, SwRS-125, SyRS-058, SyRS-125 |
| M-139 | Nexus Einstellungen/Branding | mittel | 4 | SwRS-126, SwRS-128, SyRS-126, SyRS-127 |
| M-140 | Outlook-Add-In | flach | 2 | SwRS-127, SyRS-127 |
| M-141 | Self-Care-Formulare | flach | 3 | SwRS-125, SwRS-173, SyRS-125 |
| M-142 | WPF-Rich-Client | tief | 61 | StRS-001, StRS-002, StRS-009, StRS-010, StRS-011, StRS-013, StRS-025, StRS-027, StRS-036, StRS-042, StRS-048, StRS-054, StRS-055, StRS-056, StRS-057, StRS-059, StRS-060, SwRS-001, … (+43) |
| M-143 | Gemeinsame Steuerelemente | tief | 8 | SwRS-093, SwRS-107, SwRS-164, SwRS-211, SyRS-107, SyRS-108, SyRS-112, SyRS-165 |
| M-144 | Mobile-Anbindung | flach | 1 | SwRS-212 |
| M-145 | Webservice-Host und REST-API | tief | 21 | StRS-019, StRS-026, StRS-033, StRS-052, StRS-062, SwRS-058, SwRS-069, SwRS-091, SwRS-173, SwRS-174, SwRS-175, SwRS-196, SwRS-201, SyRS-091, SyRS-105, SyRS-125, SyRS-170, SyRS-173, SyRS-174, SyRS-175, SyRS-182 |
| M-146 | Verbindungsverwaltung | flach | 3 | SwRS-002, SwRS-168, SyRS-168 |
| M-147 | Statistiken und Auswertungen | tief | 8 | StRS-046, StRS-054, SwRS-057, SwRS-088, SwRS-170, SwRS-182, SwRS-190, SyRS-182 |
| M-148 | MSP-Collector | mittel | 6 | StRS-054, SwRS-088, SwRS-170, SwRS-190, SyRS-033, SyRS-089 |
| M-149 | Management-Info und Dashboard | mittel | 4 | StRS-054, SwRS-190, SwRS-215, SyRS-170 |
| M-150 | Mein Tag (MyDay) | flach | 3 | StRS-046, SwRS-213, SwRS-215 |
| M-151 | Todo-Liste | mittel | 6 | StRS-020, StRS-046, SwRS-023, SwRS-215, SyRS-023, SyRS-054 |
| M-152 | KI-Assistent | mittel | 6 | StRS-056, SwRS-102, SwRS-167, SwRS-172, SyRS-167, SyRS-172 |
| M-153 | Externe Werkzeuge/Fernwartung | flach | 1 | SwRS-213 |
| M-154 | TradePool | flach | 2 | StRS-062, SwRS-214 |
| M-155 | RiverSuite/RiverDivo | flach | 2 | StRS-062, SwRS-214 |
| M-156 | CPra-Konnektor | flach | 2 | StRS-062, SwRS-214 |
| M-157 | Telekom Dive | mittel | 4 | SwRS-087, SwRS-175, SwRS-214, SyRS-175 |
| M-158 | GFK-Export | flach | 2 | SwRS-087, SyRS-088 |
| M-159 | Objekt-Externreferenzen | mittel | 5 | StRS-062, SwRS-023, SwRS-175, SyRS-023, SyRS-175 |
| M-160 | Zahlungsverkehrsdateien | flach | 2 | SwRS-087, SyRS-088 |
| M-161 | Produktion | mittel | 6 | StRS-052, StRS-060, SwRS-035, SwRS-067, SwRS-180, SyRS-180 |
| M-162 | Datenimport (generisch) | flach | 1 | SwRS-197 |
| M-163 | Gateway | mittel | 4 | StRS-025, SwRS-071, SwRS-214, SyRS-071 |
| M-164 | Länderverwaltung | flach | 1 | SyRS-008 |
| M-165 | Themes/Oberflächenanpassung | flach | 1 | SyRS-126 |
**Zusammenfassung der Abdeckung:**
| Einstufung | Module | Anteil |
|---|---|---|
| tief (≥ 8 Anforderungen) | 23 | 13,9 % |
| mittel (4–7) | 64 | 38,8 % |
| flach (1–3) | 78 | 47,3 % |
| nicht analysiert (0) | **0** | 0 % |
| **Summe** | **165** | **100 %** |
---
## 4. Konsistenzcheck über das gesamte Anforderungs-Set
Der Check wurde maschinell über alle 363 Anforderungsblöcke ausgeführt (Auswertung der Felder `ID`,
`Belege`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`, `Qualitätsmerkmal`).
| Prüfung | Ergebnis |
|---|---|
| Doppelte oder mehrfach vergebene IDs | **0** — alle 363 IDs sind eindeutig (62 StRS, 132 SyRS, 169 SwRS). |
| Anforderungen ohne Beleg | **0** — jede Anforderung führt mindestens einen Beleg; insgesamt 740 Belege. |
| Anforderungen ohne Angabe zur `Übernahmewürdigkeit` | **0** |
| Anforderungen ohne `Tracelinks` | **0** |
| Tracelinks auf nicht existierende IDs | **0** — vier zunächst leere Verweise (`SyRS-130`, `SyRS-131`, `SyRS-140`, ein Tippfehler `SyRS-200`) wurden im Lauf behoben, indem die fehlenden Anforderungen ergänzt beziehungsweise der Verweis korrigiert wurde. |
| Nicht-funktionale Anforderungen ohne ISO-25010-Zuordnung | **0** — alle 46 nicht-funktionalen Anforderungen führen das Merkmal im Feld `Qualitätsmerkmal`. |
| Doppelte Titel | **0** |
| Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsmarkierung | **0** — ein automatischer Ähnlichkeitsvergleich aller Paare (Feld `Aussage`, Schwelle 0,72) liefert zwei Paare: `StRS-022`/`SyRS-062` (0,83) und `SwRS-063`/`SwRS-093` (0,73). Beide sind bereits als Konsolidierungskandidat markiert. `StRS-022`/`SyRS-062` beschreiben denselben Sachverhalt auf zwei Ebenen und sind damit gemäß Vorgabe **kein** Konsolidierungsfall; die Verbindung stellen die Tracelinks her. |
| Abgleich `Hypothesen.md` gegen Inline-Markierungen | **deckungsgleich** — 5 Anforderungen tragen `Status: HYPOTHESE`, dieselben 5 tragen die Inline-Markierung `[HYPOTHESE]` im Feld `Aussage`, und dieselben 5 stehen in `Hypothesen.md`. `Hypothesen.md` enthält keine zusätzlichen freien Fragen; diese stehen in Abschnitt 5.4. |
### 4.1 Belegsituation im Überblick
| Kennzahl | Wert |
|---|---|
| Belege gesamt | 740 |
| davon `PRIMÄR` | 490 (66,2 %) |
| davon `SEKUNDÄR` | 187 (25,3 %) |
| davon `KONTEXT` | 63 (8,5 %) |
| Anforderungen mit genau einem Beleg | 76 (20,9 %) |
| Anforderungen ohne `PRIMÄR`-Beleg | 1 (`SyRS-005`, als `[HYPOTHESE]` geführt) |
| Belege je Anforderung (Durchschnitt) | 2,04 |
### 4.2 Verteilung nach Typ und Übernahmewürdigkeit
| Typ | Anzahl | | Übernahmewürdigkeit | Anzahl |
|---|---|---|---|---|
| funktional | 147 | | übernehmen | 336 |
| Daten | 87 | | veraltet | 14 |
| Sicherheit | 55 | | Workaround | 12 |
| nicht-funktional | 46 | | Sonderfall | 1 |
| Schnittstelle | 28 | | | |
ISO-25010-Merkmale der 46 nicht-funktionalen Anforderungen: Wartbarkeit 29, Zuverlässigkeit 7,
Übertragbarkeit 4, Performance-Effizienz 4, Benutzbarkeit 2.
Konsolidierungskandidaten: **67** von 363 Anforderungen (18,5 %).
### 4.3 Liste der risikorelevanten Anforderungen
Als risikorelevant gilt jede Anforderung vom Typ `Sicherheit` sowie jede, deren `Titel`, `Fakt` oder
`Aussage` Berechtigungen, Abrechnung, Fakturierung, Preisfindung, Mahnwesen, Zahlungsverkehr,
Lizenzierung, Kennwörter, Verschlüsselung, Token, Anmeldung, Datenschutz, Steuersätze,
Kontingente, Belegnummern, Signaturen oder Zugangsdaten betrifft.
**Ergebnis: 173 risikorelevante Anforderungen. Davon 172 mit mindestens einem `PRIMÄR`-Beleg; die
eine Ausnahme (`SyRS-005`) ist als `[HYPOTHESE]` gekennzeichnet. Verstöße gegen die risikobasierte
Priorisierung: 0.**
| ID | Titel | PRIMÄR-Beleg vorhanden | Status |
|---|---|---|---|
| StRS-003 | Durchgängige Belegkette vom Angebot zur Rechnung | ja | belegt |
| StRS-005 | Fakturierung erbrachter Leistungen | ja | belegt |
| StRS-006 | Gutschriften als wertmäßige Korrektur | ja | belegt |
| StRS-007 | Abholscheine und Barverkauf | ja | belegt |
| StRS-008 | Serviceverträge mit wiederkehrender Abrechnung | ja | belegt |
| StRS-009 | Automatische Erzeugung von Vertragsrechnungen | ja | belegt |
| StRS-010 | Abrechnung nach Zählerständen (Klickabrechnung) | ja | belegt |
| StRS-011 | Pauschalabrechnung von Projekten | ja | belegt |
| StRS-012 | Abrechnung erfasster Ticketzeiten | ja | belegt |
| StRS-013 | Provisionsabrechnung für Vertriebsmitarbeiter | ja | belegt |
| StRS-015 | Bestätigung erbrachter Leistung durch Kundenunterschrift | ja | belegt |
| StRS-017 | Abgestufte Sichtbarkeit von Tickets | ja | belegt |
| StRS-024 | Beschaffung über Lieferantenbelege | ja | belegt |
| StRS-025 | Elektronischer Datenaustausch mit Distributoren | ja | belegt |
| StRS-026 | Elektronische Rechnungsformate | ja | belegt |
| StRS-028 | Offene-Posten-Verwaltung | ja | belegt |
| StRS-029 | Mehrstufiges Mahnwesen | ja | belegt |
| StRS-030 | Auftragssperre bei erreichter Mahnstufe | ja | belegt |
| StRS-031 | Rollenbasierte Berechtigungsverwaltung | ja | belegt |
| StRS-032 | Einschränkende Rechte auf eigene Objekte oder eigene Filiale | ja | belegt |
| StRS-033 | Anmeldung über mehrere Identitätsquellen | ja | belegt |
| StRS-034 | Mandanten- und Filialstruktur | ja | belegt |
| StRS-035 | Lückenlose Belegnummernvergabe | ja | belegt |
| StRS-036 | Lizenzabhängige Funktionsfreischaltung | ja | belegt |
| StRS-037 | Begrenzung gleichzeitiger Anmeldungen über Lizenzanzahl | ja | belegt |
| StRS-040 | E-Mail-Kommunikation aus dem Vorgang heraus | ja | belegt |
| StRS-043 | Telefonieanbindung mit Anruferkennung | ja | belegt |
| StRS-045 | Belegfreigabe und Unterzeichnung durch den Kunden | ja | belegt |
| StRS-047 | Verwaltung von Kundenzugangsdaten | ja | belegt |
| StRS-048 | Ablösung des alten Zugangsdatenmoduls | ja | belegt |
| StRS-049 | Verwaltung installierter Kundengeräte | ja | belegt |
| StRS-050 | Wahrung der Betroffenenrechte nach DSGVO | ja | belegt |
| StRS-054 | Auswertungen und Kennzahlen für die Unternehmenssteuerung | ja | belegt |
| StRS-055 | Objektübergreifende Volltextsuche | ja | belegt |
| StRS-056 | KI-gestützte Assistenz | ja | belegt |
| StRS-057 | Kampagnen und Serienkommunikation | ja | belegt |
| StRS-059 | Kundenindividuelle Zusatzfelder | ja | belegt |
| StRS-061 | Mitarbeiterverwaltung als Grundlage der Zuständigkeit | ja | belegt |
| SyRS-001 | Rechteprüfung bei Anlage und Änderung von Geschäftspartnern | ja | belegt |
| SyRS-004 | Kundenindividuelle Sonderpreise | ja | belegt |
| SyRS-005 | Mehrstufige Preisquellen mit definierter Rangfolge | **nein** | HYPOTHESE |
| SyRS-006 | Steuersatzwechsel über verkettete Steuersätze | ja | belegt |
| SyRS-007 | Massenumstellung von Artikelsteuersätzen mit Preisoption | ja | belegt |
| SyRS-009 | Warengruppenhierarchie mit Erlöskontozuordnung | ja | belegt |
| SyRS-013 | Belegsperre während der Bearbeitung | ja | belegt |
| SyRS-017 | Zahlungsziel aus Zahlungskondition | ja | belegt |
| SyRS-018 | Abweichende Liefer-, Rechnungs- und Lizenznehmeradresse | ja | belegt |
| SyRS-020 | Rechteprüfung an jedem Belegänderungspunkt | ja | belegt |
| SyRS-021 | Getrennte Rechte für Einkaufs- und Verkaufspreisänderung | ja | belegt |
| SyRS-023 | Gemeinsames Objektprotokoll über Objektart und Objekt-ID | ja | belegt |
| SyRS-030 | Kontingentverbrauch und Restkontingent eines Vertrags | ja | belegt |
| SyRS-031 | Ausgleichsartikel für Kontingentsalden | ja | belegt |
| SyRS-032 | Stichtagsbezogene Ermittlung fälliger Abrechnungen | ja | belegt |
| SyRS-034 | Gegenseitiger Ausschluss der Provisionsmodule | ja | belegt |
| SyRS-035 | Einmalige Abrechnung eines Zeiteintrags | ja | belegt |
| SyRS-036 | Stundensatzzuschläge nach Zeitfenstern | ja | belegt |
| SyRS-042 | Löschen von Zeiteinträgen nur mit eigenem Recht | ja | belegt |
| SyRS-051 | Rechteprüfungen beim Speichern eines Tickets | ja | belegt |
| SyRS-055 | Ticketabschluss trotz offener RMA | ja | HYPOTHESE |
| SyRS-057 | Weiterleitung und Eskalation von Tickets | ja | belegt |
| SyRS-064 | Rollen von Systemartikeln | ja | belegt |
| SyRS-065 | Artikelbezogene Sichtbarkeits- und Sperrsteuerung | ja | belegt |
| SyRS-070 | Erkennung doppelter Lieferantenrechnungsnummern | ja | belegt |
| SyRS-073 | Bezug von Produktdaten externer Kataloge | ja | belegt |
| SyRS-074 | Kontingentüberwachung externer Katalogzugriffe | ja | belegt |
| SyRS-080 | Kontenfindung nach Artikel, Warengruppe und Filiale | ja | belegt |
| SyRS-081 | Erfassung des Bezahltstatus mit Herkunftsangabe | ja | belegt |
| SyRS-082 | Prüfung und Vorschau vor dem Mahnlauf | ja | belegt |
| SyRS-083 | Rücknahme eines Mahnlaufs um genau eine Stufe | ja | belegt |
| SyRS-084 | Keine Mahnstufensperre auf der Lieferantenseite | ja | belegt |
| SyRS-086 | Kontoumsatzabruf über finAPI mit eigenem Recht | ja | belegt |
| SyRS-087 | Protokoll der Zahlungseingänge mit eigener Laufnummer | ja | belegt |
| SyRS-088 | Erzeugung von Zahlungsverkehrsdateien | ja | belegt |
| SyRS-089 | Produktlebenszyklus von Lizenzbeständen | ja | belegt |
| SyRS-090 | Rechteermittlung ausschließlich über Gruppenzugehörigkeit | ja | belegt |
| SyRS-091 | Deklarative Rechteprüfung an REST-Endpunkten | ja | belegt |
| SyRS-092 | Filialbeschränkung als eigenständige Prüfstufe | ja | belegt |
| SyRS-093 | Hierarchische Nummernkreisauflösung über Mitarbeiter, Filiale und Mandant | ja | belegt |
| SyRS-100 | Sitzungsticket mit anwendungsabhängiger Gültigkeitsdauer | ja | belegt |
| SyRS-102 | Anwendungsbezogene Zugangsrechte bei der Anmeldung | ja | belegt |
| SyRS-103 | Lizenzprüfung mit Anzahl, Ablaufdatum und Versionsgrenze | ja | belegt |
| SyRS-104 | Wiederverwendung bestehender Sitzungen vor der Lizenzprüfung | ja | belegt |
| SyRS-105 | Zwei-Faktor-Authentifizierung als zweite Prüfstufe | ja | belegt |
| SyRS-106 | Protokollierung von Anmeldeversuchen | ja | belegt |
| SyRS-107 | Kennwortspeicherung der Anwendungsbenutzer | ja | belegt |
| SyRS-108 | Symmetrische Verschlüsselung mit fest hinterlegtem Ersatzschlüssel | ja | belegt |
| SyRS-109 | Erzeugung und Prüfung von API-Zugriffstoken | ja | belegt |
| SyRS-112 | Unterdrückung des Versands an externe Empfänger außerhalb von Freigabeversionen | ja | belegt |
| SyRS-115 | Anrufprotokollierung mit Vorgangsbezug | ja | belegt |
| SyRS-120 | Eigenes Rechtesystem für Web-Benutzerkonten | ja | belegt |
| SyRS-121 | Sperre der Belegeinsicht für Web-Benutzer in der Fachlogik | ja | belegt |
| SyRS-122 | Kennwortregeln und Kennwortversand für Web-Konten | ja | belegt |
| SyRS-123 | Belegfreigabe über Einmal-Token ohne Anmeldung | ja | belegt |
| SyRS-124 | Erfassung und Speicherung der Unterschrift im Browser | ja | belegt |
| SyRS-126 | Mandantenspezifisches Erscheinungsbild der Weboberfläche | ja | belegt |
| SyRS-150 | Ermittlung löschbarer Kontaktdaten nach DSGVO | ja | belegt |
| SyRS-151 | Nicht implementierte Löschpfade im Datenschutzmodul | ja | HYPOTHESE |
| SyRS-152 | Bereinigung nicht mehr benötigter Datenbestände | ja | belegt |
| SyRS-154 | Feldbezogene Änderungshistorie ausgewählter Belegangaben | ja | belegt |
| SyRS-161 | Ausführung fehlender Datenbankskripte vor der Anmeldung | ja | belegt |
| SyRS-170 | Getrennte Rechte je Auswertung | ja | belegt |
| SyRS-171 | Bedarfsgesteuerte und vollständige Indexaktualisierung | ja | belegt |
| SyRS-174 | Beschränkung von Endpunkten auf die gehostete Betriebsform | ja | belegt |
| SyRS-176 | Feldänderungen über viele Datensätze hinweg | ja | belegt |
| SyRS-177 | Administrative SQL-Ausführung aus der Anwendung | ja | belegt |
| SyRS-178 | Zeitgesteuerter Reportversand | ja | belegt |
| SyRS-179 | Überwachung erwarteter, wiederkehrender Ereignisse | ja | belegt |
| SyRS-181 | Abwesenheits- und Urlaubsverwaltung als Planungsgrundlage | ja | belegt |
| SyRS-182 | Mitarbeiterartikel als Bindeglied zwischen Person und Leistung | ja | belegt |
| SyRS-130 | Verschlüsselte Ablage und protokollierter Zugriff auf Zugangsdaten | ja | belegt |
| SyRS-131 | Unvollständige Kennwortspeicherung im abgelösten Zugangsdatenmodul | ja | belegt |
| SwRS-013 | Belegartspezifische Sperrentitäten | ja | belegt |
| SwRS-017 | Zahlungskonditionen als eigene Stammdatentabelle | ja | belegt |
| SwRS-020 | Zentrale Rechteprüfmethoden im Belegkern | ja | belegt |
| SwRS-021 | Rücksetzen unberechtigter Preisänderungen anhand der Vorgängerversion | ja | belegt |
| SwRS-027 | Warnung bei nicht umgewandelten Fremdartikeln | ja | belegt |
| SwRS-030 | Kontingentfelder als eigenständige Vertragsattribute | ja | belegt |
| SwRS-032 | Abrechnungslauf über benannte Abfragen je Vorgangsart | ja | belegt |
| SwRS-034 | Rechteausdrücke der Modulregistrierung | ja | belegt |
| SwRS-035 | Filterstruktur der Ticketabrechnung | ja | belegt |
| SwRS-042 | Unterschrift als eigenständige Entität je Zeiteintrag | ja | belegt |
| SwRS-043 | Protokoll der Zeiteintragsänderungen | ja | belegt |
| SwRS-051 | Rechteprüfung im Vorspeicherschritt der Ticketentität | ja | belegt |
| SwRS-053 | Variablenersetzung über eine gemeinsame Komponente | ja | belegt |
| SwRS-054 | Abschlussstatus des Tickets aus den Einstellungen | ja | belegt |
| SwRS-066 | Produktfamilien mit Kunden- und Positionssperren | ja | belegt |
| SwRS-074 | Kontingentangabe als Antwortbestandteil des Katalogs | ja | belegt |
| SwRS-080 | Dreistufige Erlöskontotabellen | ja | belegt |
| SwRS-081 | Herkunftsangabe als Pflichtparameter der Zahlungsbuchung | ja | belegt |
| SwRS-082 | Mahnstufenfelder je Stufe mit Datum und Bearbeiter | ja | belegt |
| SwRS-083 | Sperrgrenze aus dem Kundenstamm | ja | belegt |
| SwRS-084 | Mandat als Belegfeld mit eigener Übernahmeregel | ja | belegt |
| SwRS-085 | Bankzugangsdaten der finAPI-Anbindung | ja | HYPOTHESE |
| SwRS-086 | Zahlungseingangsprotokoll als eigenständige Entität | ja | belegt |
| SwRS-087 | Zahlungsverkehr als eigener Datenaustauschzweig | ja | belegt |
| SwRS-088 | Lizenzbestandsvergleich gegen MSP-Daten | ja | belegt |
| SwRS-090 | Zwei Wege der Rechteermittlung | ja | belegt |
| SwRS-091 | Drei Autorisierungsattribute mit gemeinsamer Filterbasis | ja | belegt |
| SwRS-092 | Filialvergleich als gemeinsame Hilfsfunktion | ja | belegt |
| SwRS-093 | Zwei Wege der Nummernkreisauflösung | ja | belegt |
| SwRS-094 | Optimistische Sperre der Nummernvergabe | ja | belegt |
| SwRS-095 | Zusammengesetzte SQL-Anweisungen der Nummernprüfung | ja | belegt |
| SwRS-100 | Ticketerzeugung mit gerätebezogenem Zusatzwert | ja | belegt |
| SwRS-101 | Anwendungsart als Konfigurationsobjekt der Anmeldung | ja | belegt |
| SwRS-102 | Lizenzkennungen als zentrale Konstantenliste | ja | belegt |
| SwRS-103 | Sperre um Ticketprüfung und Lizenzvergabe | ja | belegt |
| SwRS-104 | Austauschbare Zweitfaktor-Prüfer | ja | belegt |
| SwRS-106 | Kennwortprüfung als Datenbankvergleich des Hashwerts | ja | belegt |
| SwRS-107 | Verschlüsselungskomponente mit optionalem Schlüsselparameter | ja | belegt |
| SwRS-108 | Protokollierung aller Tokenvorgänge | ja | belegt |
| SwRS-109 | Trennung persönlicher und administrativer Tokenverwaltung | ja | belegt |
| SwRS-112 | Mailkomponenten nach Aufgabe getrennt | ja | belegt |
| SwRS-120 | Web-Rechte als eigene Entitäten mit Kategorien | ja | belegt |
| SwRS-121 | Kennzeichen der Web-Anmeldung im Anmeldekontext | ja | belegt |
| SwRS-124 | Geteiltes Dokument als eigene Entität | ja | belegt |
| SwRS-130 | Zugangsdaten als verschlüsselte Zusatzfelder | ja | belegt |
| SwRS-131 | Masterschlüssel aus der Konfigurationsdatenbank | ja | belegt |
| SwRS-132 | Migration der Altzugangsdaten in den Passwort-Manager | ja | belegt |
| SwRS-150 | Löschprotokoll des Datenschutzmoduls | ja | belegt |
| SwRS-153 | Audit-Felder als Bestandteil der Belegbasis | ja | belegt |
| SwRS-160 | Selbstenthaltende Veröffentlichung der Webanwendung | ja | belegt |
| SwRS-177 | SQL-Verwaltung mit Datenbankauskunft für den Lizenzserver | ja | belegt |
| SwRS-179 | Erwartete Ereignisse mit getrennter Auswertung | ja | belegt |
| SwRS-181 | Mitarbeiterbausteine nach Aufgabe getrennt | ja | belegt |
| SwRS-192 | CRM-Projekte mit eigener Nummernart | ja | belegt |
| SwRS-193 | Lieferantenverträge am Account | ja | belegt |
| SwRS-201 | docuFORM-Anbindung als eigenes Projekt | ja | belegt |
| SwRS-208 | Strukturierte Kundendokumentation | ja | belegt |
| SwRS-210 | Zuordnung von Schulungsvideos zu Objekten | ja | belegt |
| SwRS-212 | Mobile Datenversorgung als eigener Baustein | ja | belegt |
| SwRS-213 | Externe Werkzeuge und Fernwartung | ja | belegt |
| SwRS-214 | Fremdsystemkonnektoren mit eigener Verbindungslogik | ja | belegt |
| SwRS-215 | Dashboard und Startbereich als verdichtete Einstiegssicht | ja | belegt |
---
## 5. Selbstbewertung
### 5.1 Analysetiefe je Modul (absolute Zahlen)
Von **165** Inventarmodulen wurden
- **23** tief analysiert (≥ 8 Anforderungen) — darunter Belegkern, Rechnungen, Verträge, Helpdesk,
Zeiterfassung, Rechteverwaltung, Anmeldung, Lizenzierung, Nummernkreise, Mandanten/Filialen,
Mahnwesen, Artikelstamm, Web-Benutzerkonten, REST-Schnittstelle;
- **64** mittel analysiert (4–7 Anforderungen);
- **78** flach analysiert (1–3 Anforderungen);
- **0** gar nicht analysiert.
Die Verteilung folgt der Vorgabe „Breite vor Tiefe": zuerst wurde für jedes Modul mindestens eine
belegte Anforderung gebildet, danach wurden die Risikobereiche vertieft. Die 78 flach analysierten
Module tragen überwiegend Anforderungen auf SwRS-Ebene, die den Baustein und seine Datenstruktur
benennen, nicht seine inneren Regeln.
### 5.2 Mindestabdeckung
**Erreicht.** Jedes der 165 Inventarmodule hat mindestens eine Anforderung; kein Modul steht als
`nicht analysiert` im Inventar. Es war für kein Modul erforderlich, mangels belegbarer Aussage auf
eine Anforderung zu verzichten.
### 5.3 Stellen mit dünnem Beleg
Der Gesamtanteil an `PRIMÄR`-Belegen liegt bei 66,2 %. Dünn belegt sind insbesondere:
1. **Preisfindung (`SyRS-005`, `SwRS-005`).** Die einzige Anforderung ohne `PRIMÄR`-Beleg. Vier
konkurrierende Preisquellen sind nachgewiesen, die Rangfolge nicht. Als `[HYPOTHESE]` geführt.
2. **Kontenfindung (`SyRS-080`, `SwRS-080`).** Die drei Zuordnungstabellen sind im Schema belegt,
die Rangfolge zwischen ihnen wurde aus der Tabellenstruktur erschlossen, nicht aus dem
auswertenden Code. Die Prüfidee benennt diese offene Stelle ausdrücklich.
3. **Module, die nur über Verzeichnisstruktur und Modulregistrierung belegt sind.** Dazu zählen
TradePool (`M-154`), CPra (`M-156`), Telekom Dive (`M-157`), Social Media (`M-132`), Videoportal
(`M-133`), Chats (`M-128`), Mobile (`M-144`), IT-Planner (`M-90`) und Gateway (`M-163`). Ihre
Anforderungen benennen den Baustein und seine Datenstruktur, nicht die durchgesetzten Regeln.
Hier ist der Anteil `SEKUNDÄR`/`KONTEXT` am höchsten.
4. **Nicht erhobene Artefaktart.** Change-Historie, Commit-Messages, Tickets und Release Notes
konnten nicht ausgewertet werden, weil das Arbeitsverzeichnis kein Repository der analysierten
Codebasis enthält. Damit fehlt durchgängig die Belegklasse, aus der sich die Entstehungsgründe
von Workarounds ableiten ließen. Die 12 als `Workaround` und 14 als `veraltet` eingestuften
Anforderungen stützen sich stattdessen auf Quelltextkommentare, `[Obsolete]`-Attribute und
Bezeichnungen wie „(obsolate)" oder `ContractEvaluation2`.
5. **Vier Aussagen, die auf dem Fehlen eines Artefakts beruhen** (`SwRS-085` zu Bankzugangsdaten
ist der ausdrücklich als Hypothese geführte Fall). Negativbefunde aus einer Teilmenge tragen
keine belegte Aussage; wo sie dennoch für die Zielarchitektur wichtig sind, wurden sie in die
Prüfidee verschoben statt in die Aussage.
### 5.4 Offene Punkte ohne zugehörige Anforderung
Diese Punkte sind absichtlich **nicht** in `Hypothesen.md` aufgeführt, weil ihnen keine Anforderung
gegenübersteht:
- Die tatsächlich ausgeführten SQL-Anweisungen der benannten Abfragen (`NamedQueryEnums`) liegen
außerhalb des gelesenen C#-Codes; ihre Wirkung wurde aus Methodennamen und Parametern erschlossen.
- Die Zuordnung der 1.558 Datenbanktabellen zu den 165 Modulen wurde nur stichprobenartig
hergestellt. Etwa 1.400 Tabellen sind in dieser Analyse nicht einzeln betrachtet worden.
- Die 790 Skriptdateien unter `Administration/Scripts` wurden nicht inhaltlich ausgewertet; aus
ihnen ließe sich die fachliche Entwicklung des Datenmodells rekonstruieren.
- Von 15.554 C#-Dateien wurden rund 90 vollständig oder in wesentlichen Abschnitten gelesen. Die
übrigen sind über Verzeichnisstruktur, Klassennamen und Methodensignaturen erfasst.
- Ob der Sammelbenutzer `"InternalWebAccountUser"` (siehe `SwRS-121`) im Betrieb Rechte trägt, die
über die Portalfunktionen hinausgehen, konnte nicht festgestellt werden.
### 5.5 Warum Hypothesen geführt wurden — und warum nur fünf
Fünf von 363 Anforderungen (1,4 %) sind als Hypothese gekennzeichnet. Der niedrige Anteil ergibt
sich aus der gewählten Arbeitsweise: Wo ein Sachverhalt nicht bis zur durchsetzenden Stelle
verfolgt werden konnte, wurde in der Regel **keine** Anforderung geschrieben, sondern das Modul
flacher abgedeckt. Als Hypothese geführt wurden nur die fünf Fälle, in denen die Aussage für die
Zielarchitektur so wichtig ist, dass ihr Weglassen ein Risiko darstellt:
| ID | Warum trotz offener Frage geführt |
|---|---|
| `SyRS-005` | Preisfindung ist abrechnungsrelevant; ihr Fehlen im Zielsystem wäre ein Funktionsverlust. |
| `SyRS-055` | Der Quelltextkommentar belegt eine beabsichtigte, nicht umgesetzte Regel. |
| `SyRS-151` | Datenschutzrechtlich zwingende Anforderung, im heutigen Stand nachweislich nicht erfüllt. |
| `SwRS-055` | Der Sammelabschluss verändert Ticketzustände ohne Protokolleintrag. |
| `SwRS-085` | Sicherheitsrelevanter Negativbefund, der zu prüfen ist. |
Ein Anteil von 1,4 % ist für eine Codebasis dieser Größe niedrig. Er bedeutet nicht, dass wenige
Fragen offen sind, sondern dass die offenen Stellen überwiegend als **nicht geschriebene**
Anforderungen erscheinen — sichtbar in den 78 flach abgedeckten Modulen und in Abschnitt 5.4.
### 5.6 Wesentliche Befunde für die Neuimplementierung
**Sicherheit (unmittelbarer Handlungsbedarf):**
1. Kennwörter von Anwendungs- und Web-Benutzern werden als **ungesalzener SHA-1-Hash** gespeichert
(`SyRS-107`, `SyRS-122`, `SwRS-106`). Der Quelltext vermerkt die Schwäche selbst
(`// TODO the password should be salted!!!`).
2. Neue Web-Konten erhalten ihr **Kennwort im Klartext per E-Mail** (`SyRS-122`).
3. `AESCryptoLogic` fällt ohne übergebenen Schlüssel auf eine **im Quelltext hinterlegte Konstante**
zurück und leitet den Initialisierungsvektor aus demselben Hash wie den Schlüssel ab, wodurch er
je Schlüssel konstant ist (`SyRS-108`, `SwRS-107`).
4. Die Nummernvergabe setzt SQL-Abfragen aus **Zeichenketten** zusammen (`SwRS-095`).
5. Das **alte Zugangsdatenmodul speichert weder Kennwort noch Salt** und ist funktionslos
(`SyRS-131`, `StRS-048`).
6. Die Lizenzbegrenzung gleichzeitiger Anmeldungen ist über eine **prozesslokale Sperre** gelöst und
trägt bei mehreren Dienstinstanzen nicht (`SwRS-103`).
**Konsolidierung (Zielarchitektur):**
7. **Vier Datenhaltungen für installierte Geräte** — Stammblatt (`Stammdat`), Account-Gerät
(`AccountDevices`), Asset-Management-Gerät (`AssetManagementDevices`) und Kunden-Asset — plus
`GeraeteKopf` (`SyRS-140`, `SwRS-140` bis `SwRS-143`). Dies ist der im Auftrag genannte
Beispielfall und der größte Konsolidierungshebel.
8. **Zwei Geschäftspartnerstämme** im Parallelbetrieb, umgeschaltet über eine Einstellung
(`StRS-002`).
9. **Fünf Mechanismen zur Änderungsverfolgung** (Audit-Felder, Versionstabellen, `ReceiptLogBL`,
`ChangeTracking/History`, `AnlageLog`) — `SwRS-154`.
10. **Zwei Benachrichtigungsmechanismen** (`Notifications`, `NexusNotifications`) — `SwRS-128`.
11. **Drei Wege der Rechteprüfung** und **zwei Rechtesysteme** (interne Benutzer, Web-Konten) —
`SwRS-090`, `SwRS-120`.
12. **Zwei parallele Implementierungen** für Inventur (`SwRS-063`) und Nummernkreisauflösung
(`SwRS-093`), letztere über einen Merkmalsschalter erreichbar.
13. **Doppelte Datenzugriffsimplementierung je Modul** (`BLLogic`/`WSLogic`) — im Web-Zielsystem
entbehrlich (`SwRS-002`).
**Struktur:**
14. `ReceiptBL` umfasst **11.441 Zeilen** und bündelt sieben Belegarten; die Aufteilung nach dem
Vorbild von `Sales/Support` (49 nach Aufgabe geschnittene Klassen) ist im Zielsystem
naheliegend (`SwRS-010`, `SwRS-057`).
15. Fehlermeldungen stehen **deutschsprachig fest im Quelltext**, obwohl Ressourcendateien und eine
Zweisprachigkeitsvorgabe bestehen (`SwRS-129`).
### 5.7 Empfehlungen für eine Folge-Iteration
Nach Nutzen geordnet:
1. **Preisfindung und Kontenfindung bis zur entscheidenden Bedingung verfolgen.** `ReceiptItemBL`
(4.290 Zeilen) und `ReceiptPriceHelperBL` gezielt lesen. Beide Rangfolgen sind
abrechnungsrelevant und heute die einzigen bekannten Belegschwächen im Risikobereich
(`SyRS-005`, `SyRS-080`).
2. **`ReceiptBL.SaveReceipt` und `ForwardReceipt` vollständig auswerten.** Von 11.441 Zeilen wurden
rund 800 gelesen. Die Regionen in `ForwardReceipt` (Zeilen 2464–2860) benennen mindestens
fünfzehn weitere Übernahmeregeln, die je eine eigene Anforderung tragen könnten.
3. **Datenmodell systematisch erschließen.** Der Schema-Dump enthält 1.558 Tabellen; nur ein
Bruchteil ist erfasst. Eine Zuordnung Tabelle → Modul würde die 78 flach abgedeckten Module auf
Datenebene tragfähig machen.
4. **Die 790 Datenbankskripte auswerten.** Sie enthalten die Entwicklungsgeschichte des
Datenmodells und damit die beste verfügbare Ersatzquelle für die fehlende Change-Historie —
insbesondere für die Einstufung `Workaround` und `veraltet`.
5. **Das Rechtemodell vollständig ableiten.** `UserRightsConst.cs` enthält rund 800 Rechte in 60
Klassen; `ModuleRegistration.GetRightsForModule` erlaubt die maschinelle Ableitung einer
Rechtematrix Modul × Recht. Diese Matrix ist die Grundlage des Rollenmodells im Zielsystem.
6. **Die Weboberfläche vertiefen.** 460 Razor-Komponenten wurden nur über ihre Namen erfasst. Da
das Zielsystem eine Web-/SaaS-Anwendung ist, ist der bestehende Blazor-Teil die unmittelbarste
Vorlage.
7. **Die als `[Obsolete]` markierten Rechte und Module systematisch erfassen.** `UserRightsConst.cs`
enthält mehrere solcher Kennzeichnungen (`N13`, `Riversuite`, `CRM_ACTIVITY_MANAGEMENT`,
`DOCUMENT_CHECK`, `CHANGE_SYSTEM_SETTINGS`, `RIVERSUITE_ADMINISTRATION`). Sie sind belastbare
Kandidaten für die Einstufung `veraltet` und verkleinern den Migrationsumfang.
### 5.8 Grenzen dieser Analyse
- Alle Aussagen beruhen auf statischer Betrachtung. Ob eine im Code vorhandene Prüfung im Betrieb
tatsächlich erreicht wird, wurde nicht festgestellt.
- Zeilennummern beziehen sich auf den Dateistand im Arbeitsverzeichnis zum Zeitpunkt des Laufs.
- Die Modul-zu-Anforderung-Zuordnung in Abschnitt 3 ist maschinell erzeugt und in fünfzehn Fällen
manuell korrigiert; sie ist eine Näherung, keine exakte Zuordnung.
- Die Einstufung `Übernahmewürdigkeit` ist eine Einschätzung aus Codesicht. Sie ersetzt die
fachliche Bewertung durch Domänenexperten nicht (Schritt 7 der Methodenkette).
@@ -0,0 +1,284 @@
# Glossar
Domänenbegriffe, die in `StRS.md`, `SyRS.md` und `SwRS.md` verwendet werden. Technische Bezeichner
(Klassen, Methoden, Tabellen, Spalten) sind in ihrer Originalsprache belassen. Jeder Eintrag nennt
die Fundstelle, aus der die Bedeutung abgeleitet wurde.
## A
**Abholschein** — Belegart für Ware, die der Kunde selbst abholt. Tabellen `AbholKopf`/`AbholPos`,
Sicht `PickupLists`, Objektart 5, Nummernart `PickupList = 5`.
*Quelle: `NumberGroupEnum.cs`, `docs/reference/receipts/receipts-backend-architecture.md`.*
**Account** — Geschäftspartner im neuen Stammdatenmodell, der gleichzeitig Kunde, Lieferant und
Interessent sein kann. Tabelle `Accounts` mit den Rollenzuordnungen `AccountCustomers`,
`AccountSuppliers`, `AccountTypeToAccounts`. Löst den älteren, getrennten Kunden- (`Kunden`) und
Lieferantenstamm (`Kreditor`) ab.
*Quelle: `AccountBL.cs`, `SSMS_DB_SCHEMA.sql`.*
**AnlageArt** — Zahlenkodierung der Objektart im gemeinsamen Belegprotokoll `AnlageLog`:
1 = Angebot, 2 = Auftrag, 3 = Lieferschein, 4 = Rechnung, 5 = Abholschein, 6 = Gutschrift,
22 = Vertrag. Entspricht der Aufzählung `CentronObjectKindNumeric`.
*Quelle: `docs/reference/receipts/receipts-backend-architecture.md`.*
**Anwendungsart (`ApplicationKind`)** — Konfigurationsobjekt je anmeldefähiger Anwendung; bündelt
Lizenz-GUID, zusätzliche Lizenzen, erforderliches und ausschließendes Recht sowie die
Ticketgültigkeit.
*Quelle: `ApplicationKind.cs`, `docs/reference/security/licensing-system.md`.*
**Asset** — Beim Kunden installiertes Wirtschaftsgut. Im System in mindestens vier getrennten
Datenhaltungen geführt: Stammblatt (`Stammdat`), Account-Gerät (`AccountDevices`),
Asset-Management-Gerät (`AssetManagementDevices`) und Kunden-Asset (`CustomerAsset`).
Zusammenführungskandidat für das Zielsystem.
*Quelle: `MasterDataList.cs`, `AccountDevice.cs`, `CustomerAsset.cs`, `SSMS_DB_SCHEMA.sql`.*
**Ausgleichsartikel** — Systemartikel, über den ein Saldo zwischen vereinbarter und erbrachter
Leistung als Belegposition dargestellt wird. Getrennt für Vertrag
(`ArticleBL.GetContractBalanceArticle`) und Pauschale (`GetFlatrateBalanceArticle`).
*Quelle: `ArticleBL.cs`.*
## B
**Barcode-Zustand (`BarcodeState`)** — Zustand eines Einzelstücks: `InStock`, `InRequest`,
`InDeliveryList`, `InInvoice`, `ManuallyBookedOut`. Wird bei jeder Warenbewegung fortgeschrieben und
in `BarcodeHistoryBL` historisiert.
*Quelle: `RmaBL.cs`, `BarcodeHistoryBL.cs`.*
**Beleg (`Receipt`)** — Oberbegriff für die sieben Vorgangsarten Angebot, Auftrag, Lieferschein,
Rechnung, Gutschrift, Abholschein und Vertrag. Alle leiten von `ReceiptBase` ab und nutzen den
gemeinsamen Belegkern `ReceiptBL`.
*Quelle: `docs/reference/receipts/receipts-backend-architecture.md`.*
**Belegkette / Belegweiterführung (`Forward`)** — Überführung der Positionen eines Belegs in einen
Folgebeleg unter Übernahme von Konditionen, Adressen, Filiale, Provision und Mandat.
*Quelle: `ReceiptBL.ForwardReceipt`.*
**Belegprojekt-Layout (`ReceiptProjectLayoutItem`)** — Gliederung eines Belegs in Abschnitte, die
einzeln weitergeführt und ausgegeben werden können. Nicht zu verwechseln mit dem **CRM-Projekt**.
*Quelle: `ReceiptBL.ForwardReceipt`, `Receipts/Projects/`.*
**Belegversion** — Vollständiger Stand eines Belegs zu einem Ausgabezeitpunkt. Wird in
Versionstabellen (`RechKopfVersions` usw.) als strukturgleiche Kopie archiviert.
*Quelle: `ReceiptBL.CreateNewVersion`, `docs/reference/receipts/receipts-backend-architecture.md`.*
## C
**c-entron Nexus** — Blazor-Server-Webanwendung der Suite mit ServiceBoard (Ticketbearbeitung),
Kundenportal (WebCart), WebOffer, Dokumentensignatur und Verwaltungsbereich. Auch „c-entron Web".
*Quelle: `README.md`, `src/nexus/CentronNexus/`.*
**`CentronObjectKindNumeric`** — Systemweite Aufzählung der Objektarten. Grundlage für alle
objektartübergreifenden Referenzen (Protokoll, Aufgaben, Dokumente, Suchindex, Fremdschlüssel).
*Quelle: `IndexSearchBL.cs`, `CentronModule.cs`.*
**Concurrency-GUID (`ConcurrencyControlGuid`)** — Nebenläufigkeitskennung am Beleg. Punktuelle
Änderungen werden nur ausgeführt, wenn die übergebene mit der gespeicherten Kennung übereinstimmt.
*Quelle: `ReceiptBL.cs`, `docs/reference/receipts/receipts-backend-architecture.md`.*
## D
**DSGVO-Modul** — Funktionsbereich zur Wahrung der Betroffenenrechte: Ermittlung und Löschung von
Kontaktdaten sowie Bereinigung nicht mehr benötigter Datenbestände. Eigener Rechtezweig
`UserRightsConst.DsgvoModule`.
*Quelle: `DataSecurityBL.cs`, `UserRightsConst.cs`.*
## E
**EDI** — Elektronischer Datenaustausch mit Distributoren. Je Distributor (ALSO, AlsoCH, Alltron,
Komsa, EGIS, Concerto) eine eigene Implementierung, vermittelt über `EDIDispatcherBL` und
protokolliert in `EDILogBL`.
*Quelle: `src/backend/Centron.BL/EDI/`, `docs/reference/edi/edi-architecture.md`.*
**Einschränkendes Recht (restricting right)** — Recht, das ein bereits vergebenes Basisrecht
begrenzt, etwa auf eigene Objekte (`SHOW_HELPDESK_ONLY_OWN`) oder die eigene Filiale
(`EDIT_INVOICE_ONLY_OWN_BRANCH`).
*Quelle: `CentronRights.md`, `ReceiptBL.CanUserEditReceipt`.*
## F
**Filiale (`Filiale`, `BranchI3D`)** — Organisatorische Einheit unterhalb des Mandanten. Jeder Beleg
trägt eine Filiale; Nummernkreise, Erlöskonten und Rechte können filialbezogen sein.
*Quelle: `MandatoryBL.cs`, `BranchBL.cs`, `SSMS_DB_SCHEMA.sql`.*
## G
**Gutschrift** — Belegart zur wertmäßigen Korrektur einer Rechnung. Tabellen `GutKopf`/`GutPos`,
Sicht `CreditVouchers`, Objektart 6.
*Quelle: `docs/reference/receipts/receipts-backend-architecture.md`, `UserRightsConst.cs`.*
## H
**Helpdesk / Ticket** — Servicevorgang zu einem Kundenanliegen. Tabelle `hlpdsk_requests`,
klassifiziert über `hlpdsk_typen`, `hlpdsk_kategorien`, `hlpdsk_status`, `hlpdsk_prioritaeten`.
*Quelle: `HelpdeskBL.cs`, `SSMS_DB_SCHEMA.sql`.*
**Hotline-Masterkey** — Zentraler Schlüssel aus der Konfigurationsdatenbank, mit dem der
Passwort-Manager Kundenzugangsdaten ver- und entschlüsselt.
*Quelle: `PasswordManagerBL.cs`, `CentronConfigurationDbBL.GetHotlineMasterKey`.*
## I
**`I3D`** — Durchgängiger Name des Primärschlüssels aller persistierten Entitäten.
*Quelle: `BaseEntity.cs`, `PersistedEntity.cs`.*
**Inventur** — Zählprozess des Lagerbestands, gegliedert in Zählgruppen; Lager werden einzeln, die
Inventur insgesamt abgeschlossen.
*Quelle: `InventoryNewBL.cs`.*
## K
**Klickabrechnung** — Mengenabhängige Vertragsabrechnung nach Zählerständen von Ausgabegeräten
(Managed Print Services). Zählerstand am Stammblatt (`CounterDevice`), Einstellungen unter
`ClickBillingSettingsController`.
*Quelle: `MasterDataList.cs`, `ModuleRegistration.cs`.*
**Kommissionierung** — Bereitstellung der Auftragspositionen im Lager, vollständig oder als
Teilkommissionierung mit eigener Lieferadresse.
*Quelle: `OrderCommissionBL.cs`, `PartialCommissionOrderBL.cs`, `ReceiptBL.UpdateReceiptQuantityPicked`.*
**Kontingent (Vertrag)** — Vereinbartes Leistungsvolumen eines Vertrags in Stunden oder Betrag.
Verbrauch, Saldo, Restwert und Grenzwert werden als getrennte Vertragsattribute geführt.
*Quelle: `ReceiptContract.cs`, `ContractBL.GetContingentRest`.*
## L
**Lizenz** — GUID, die eine Anwendung oder eine Einzelfunktion freischaltet. Kann Anzahl,
Gültigkeitsdatum und maximale Programmversion tragen. Die Sammellizenz `LicenseGuids.Centron`
schließt zahlreiche Einzellizenzen ein.
*Quelle: `LicenseGuids.cs`, `LicenseManager.cs`, `docs/reference/security/licensing-system.md`.*
## M
**Mahnstufe (`DunningLevel`)** — Stand des Mahnverfahrens einer Rechnung: `None`, `Level1`,
`Level2`, `Level3`. Je Stufe werden Datum und ausführender Benutzer am Beleg gespeichert.
*Quelle: `DunningRunBL.cs`.*
**Mandant (`Mandant`)** — Oberste organisatorische Einheit; genau einer ist als Standardmandant
gekennzeichnet (`Standard = 1 AND Status = 1`).
*Quelle: `MandatoryBL.cs`.*
**Mitarbeiterartikel** — Artikel, über den die Leistung eines Mitarbeiters bewertet und abgerechnet
wird. Zeitauswertungen und das Recht `OWN_TIME_EDIT` beziehen sich auf ihn.
*Quelle: `EmployeeArticleBL.cs`, `HelpdeskTimerBL.GetEmployeeTimeStatistics`, `CentronRights.md`.*
**MSP (Managed Service Provider)** — Geschäftsmodell mit laufend abgerechneten Dienstleistungen.
Im System als eigene Auswertungs- und Sammelmodule (`MspStatistics`, `MspCollectors`,
`MSPLicensesCompare`) sowie als Kennzeichen `IsMsp` am Stammblatt abgebildet.
*Quelle: `ModuleRegistration.cs`, `MasterDataList.cs`.*
## N
**Nummernkreis (`Nummernkreis`, `NumberGroup`)** — Fortlaufende Nummernvergabe je Nummernart
(`NumberGroupEnum`, über 30 Arten), aufgelöst über Mitarbeiterfiliale, Mandantsfiliale und
Standardmandant.
*Quelle: `NumberGroupBL.cs`, `MandatoryBL.cs`, `NumberGroupEnum.cs`.*
## O
**OPOS** — Offene-Posten-Verwaltung; Übersicht der noch nicht ausgeglichenen Rechnungen. Zugriff
über das Recht `Controlling.Finances.Dunning`.
*Quelle: `OposBL.cs`.*
## P
**Passwort-Manager** — Verschlüsselte Ablage von Zugangsdaten der Kundensysteme über Zusatzfelder
vom Typ `EncryptedText`. Löst das ältere Modul `PasswordManagementArea` ab, das im Modulkatalog als
„obsolate" gekennzeichnet ist.
*Quelle: `PasswordManagerBL.cs`, `ModuleRegistration.cs`.*
**Provisionsschema** — Regelwerk zur Ermittlung des Provisionsanspruchs eines Vertriebsmitarbeiters,
ergänzt um Mitarbeiterziele und Provisionsstufen.
*Quelle: `ReceiptProvisionSchemaBL.cs`, `ReceiptProvisionEmployeeGoalBL.cs`, `ReceiptProvisionEmployeeLevelBL.cs`.*
## R
**Rechtegruppe (`Sichgrup`/`Sichmemb`/`Sichtrus`)** — Rechte werden ausschließlich über Gruppen
vergeben; `Sichmemb` verknüpft Benutzer und Gruppe, `Sichtrus` Gruppe und Recht.
*Quelle: `AppRightsBL.CheckRightsFromUser`.*
**RMA** — Retouren-, Reparatur- und Tauschvorgang mit eigener Zustandsverfolgung je Artikel und
Seriennummer. Eigene Nummernarten für Rücksendung, Reparatur, Reparatureingang und RMA-Nummer.
*Quelle: `RmaBL.cs`, `NumberGroupEnum.cs`.*
## S
**Self-Care-Formular** — Vom Kunden im Portal ausfüllbares Formular, dessen Felder im zugehörigen
Ticketmuster definiert sind und aus dem ein Ticket entsteht.
*Quelle: `SelfCareBL.cs`, `SelfCareFormFieldGrid.razor`.*
**Sitzungsticket (`Ticket`)** — Nach erfolgreicher Anmeldung ausgegebene Sitzungskennung mit
anwendungsabhängiger Gültigkeit (Standard 30 Minuten, Monitoring-Konnektor 5 Minuten, Sonderfall
24 Stunden). Nicht zu verwechseln mit dem **Helpdesk-Ticket**.
*Quelle: `TicketBL.cs`.*
**Sonderpreis** — Kundenindividueller Artikelpreis. Zugleich die Artikelquelle des Kundenportals.
*Quelle: `CustomerSpecialArticleBL.cs`, `README.md`.*
**Stammblatt (`Stammdat`, `MasterDataList`)** — Geräteakte mit Seriennummer, Herkunftsbeleg,
Vertragsbezug, Zählerstand, Standortadresse und eigenem Dokumentenverzeichnis. Historisch für
Drucker geführt; im Zielsystem mit den übrigen Gerätedatenhaltungen zu einem Asset-Konzept
zusammenzuführen.
*Quelle: `MasterDataList.cs`, `ContractBL.GetMasterDataListFromContract`.*
**Systemartikel** — Artikel mit fest zugewiesener technischer Rolle (Fracht, Kundenrabatt,
Kontingentsaldo, Pauschalsaldo, Fremdartikel, Neuartikel, Gutschein), aufgelöst über eigene Methoden
in `ArticleBL`.
*Quelle: `ArticleBL.cs`.*
## T
**Teilkommission (`PartialCommissionOrder`)** — Teilmenge eines Auftrags, die getrennt kommissioniert
und mit eigener Lieferadresse ausgeliefert wird.
*Quelle: `PartialCommissionOrderBL.cs`, `ReceiptBL.ForwardReceipt`.*
**Ticketmuster (`TicketPattern`)** — Vorlage für die automatische oder formulargestützte
Ticketerzeugung mit acht Konfigurationsdimensionen (Allgemein, Kunde, intern, Checklisten,
Formulare, Mailvorlage, Eigenschaften, Skripte, Webformular).
*Quelle: `Management/TicketPatterns/Components/`.*
## U
**Übernahmeoptionen (`InsertReceiptTakeoverOptions`)** — Steuerung, welche Bestandteile beim
Weiterführen eines Belegs in den Folgebeleg übernommen werden.
*Quelle: `ReceiptBL.ForwardReceipt`.*
## V
**Vertrag (`ReceiptContract`)** — Belegart für dauerhafte Leistungsvereinbarungen mit
Abrechnungsintervall, Laufzeit, automatischer Verlängerung und Kontingent. Tabellen
`VertragKopf`/`VertragPos`, Objektart 22.
*Quelle: `ReceiptContract.cs`, `docs/reference/receipts/contracts-backend.md`.*
## W
**WebAccount** — Kundenzugang zum Webportal mit eigenem Rechtesystem (`WebRights`,
`WebRightsCategories`, `WebAccountsRights`), getrennt von den internen Benutzerkonten (`AppUser`).
*Quelle: `WebAccountBL.cs`, `AppRightsBL.CheckWebRightsFromUser`.*
**WebCart** — Kundenportal mit Shop, Belegübersicht, Verträgen, Tickets, Formularen und Dokumenten.
Die Artikel stammen aus den Sonderpreisen des jeweiligen Kunden.
*Quelle: `src/nexus/CentronNexus/WebCart/`, `README.md`.*
**Webbeleg (`WebReceipt`)** — Über einen Token bereitgestellter Beleg, den der Kunde ohne Anmeldung
freigeben oder ablehnen kann; führt einen eigenen Zustand (`WebReceiptState`).
*Quelle: `ReceiptBL.ChangeWebReceiptState`.*
## Z
**Zählerstand (`CounterDevice`)** — Am Stammblatt geführter Zählerstand eines Ausgabegeräts;
Grundlage der Klickabrechnung. Kann manuell erfasst oder über die docuFORM-Schnittstelle bezogen
werden.
*Quelle: `MasterDataList.cs`, `Centron.Api.docuFORM`.*
**Zahlungskondition (`Zahkond`)** — Stammdatensatz mit Zahlungsziel und Skontoregelung; Grundlage
für das Fälligkeitsdatum eines Belegs.
*Quelle: `SSMS_DB_SCHEMA.sql`, `ReceiptBL.UpdatePaymentDueDate`.*
**ZUGFeRD / XRechnung** — Formate der elektronischen Rechnung. Ein- und ausgehend unterstützt;
Import auch über die REST-Schnittstelle.
*Quelle: `ZUGFeRD_BL.cs`, `ZugferdImportController.cs`, `docs/guides/development/xrechnung.md`.*
**Zuschlagssatz (`HourlySurchargeRate`)** — Zeitfensterabhängiger Aufschlag auf den Stundensatz
(Nacht, Wochenende, Feiertag). Ein Zeiteintrag wird abschnittsweise mit den überschneidenden Sätzen
bewertet.
*Quelle: `HelpdeskTimerBL.CalculateHourlySurchargeRateOverlaps`.*
@@ -0,0 +1,141 @@
# Hypothesen
Diese Datei enthält **genau** die Anforderungen, die in `StRS.md`, `SyRS.md` und `SwRS.md` mit
`Status: HYPOTHESE` und der Inline-Markierung `[HYPOTHESE]` gekennzeichnet sind — keine weiteren
freien Fragen. Offene Punkte ohne zugehörige Anforderung sind in der Selbstbewertung des
`Analysebericht.md` (Abschnitt 5) aufgeführt.
**Anzahl: 5** von 360 Anforderungen (1,4 %).
---
## SyRS-005 — Mehrstufige Preisquellen mit definierter Rangfolge
| | |
|---|---|
| **Ebene** | SyRS |
| **Typ** | funktional |
| **Übernahmewürdigkeit** | übernehmen |
**Belegte Beobachtung:** Es bestehen mindestens vier konkurrierende Preisquellen — `ActionPriceBL`
(Aktionspreise), `ArticleVolumePricesBL` (Staffelpreise), kundenbezogene Sonderpreise
(`Accounts/SpecialPrices/`, `CustomerSpecialArticleBL`) und `ProductMatrixBL`. Die Zusammenführung
erfolgt in `ReceiptItemBL` (4.290 Zeilen) und `ReceiptPriceHelperBL` (130 Zeilen).
**Offene Frage:** In welcher Rangfolge werden die vier Preisquellen ausgewertet, und welche gewinnt
bei gleichzeitiger Gültigkeit?
**Was zur Bestätigung fehlt:** Eine zeilenweise Auswertung der Preisermittlung in `ReceiptItemBL`
bis zu der Bedingung, die die Quelle auswählt. In dieser Analyse wurde nur die API-Oberfläche der
beteiligten Klassen erfasst, nicht der Entscheidungspfad.
**Warum als Hypothese geführt:** Die Preisfindung ist abrechnungsrelevant. Ohne benannte
durchsetzende Stelle darf die Aussage nach der Regel zur risikobasierten Priorisierung nicht als
belegt geführt werden.
---
## SyRS-055 — Ticketabschluss trotz offener RMA
| | |
|---|---|
| **Ebene** | SyRS |
| **Typ** | funktional |
| **Übernahmewürdigkeit** | übernehmen |
**Belegte Beobachtung:** `HelpdeskCloseBL.CanCloseHelpdesk(int helpdeskI3D)` (Zeilen 159-167)
enthält ausschließlich eine Nichtnull-Prüfung des Parameters, den Kommentar
`//Todo: if rma exists check if finished` und die Rückgabe `true`. Die Methode ist damit die
vorgesehene, aber leere Prüfstelle.
**Offene Frage:** Soll der Abschluss eines Tickets bei einem offenen RMA-Vorgang verhindert werden?
**Was zur Bestätigung fehlt:** Eine fachliche Aussage darüber, ob die im Kommentar vermerkte Regel
gewollt ist oder bewusst nicht umgesetzt wurde. Aus den Artefakten ist nur ersichtlich, dass sie
vorgesehen war.
**Warum als Hypothese geführt:** Der Kommentar belegt eine Absicht, nicht eine durchgesetzte Regel.
---
## SyRS-151 — Nicht implementierte Löschpfade im Datenschutzmodul
| | |
|---|---|
| **Ebene** | SyRS |
| **Typ** | Sicherheit |
| **Übernahmewürdigkeit** | übernehmen |
**Belegte Beobachtung:** `DataSecurityBL.DoDeleteCustomer(int i3d, bool isReferenceDelete)` wirft
`new NotImplementedException("DoDeleteCustomer is not ready for use!")` (Zeile 856-858);
`DoDeleteSupplier` ist analog angelegt. In `DsgvoDeleteRightDeleteContacts` sind die Aufrufe für
Kunde, Lieferant, Kontaktmanagement-Kontakt und Account auskommentiert (Zeilen 803-814), ebenso die
zugehörigen Anonymisierungs-SQL-Anweisungen (Zeilen 863-903).
**Offene Frage:** Warum sind die Löschpfade für vollständige Geschäftspartner deaktiviert — aus
fachlichen Bedenken wegen der Referenzintegrität zu Belegen, oder weil die Entwicklung nicht
abgeschlossen wurde? Und wie wird ein Löschbegehren, das einen ganzen Geschäftspartner betrifft,
heute bearbeitet?
**Was zur Bestätigung fehlt:** Eine fachliche Festlegung, welche Datensätze bei einem Löschbegehren
zu anonymisieren sind und welche aus handels- und steuerrechtlichen Aufbewahrungsgründen erhalten
bleiben müssen.
**Warum als Hypothese geführt:** Die Anforderung ist datenschutzrechtlich zwingend, im heutigen
Stand aber nachweislich nicht erfüllt. Sie wird als offener Punkt geführt, nicht als belegte
Systemeigenschaft.
---
## SwRS-055 — Sammelabschluss von Tickets aus der Wartung
| | |
|---|---|
| **Ebene** | SwRS |
| **Typ** | funktional |
| **Übernahmewürdigkeit** | übernehmen |
**Belegte Beobachtung:** `HelpdeskCloseBL.CloseHelpdesk(IList<HelpdeskCompact> helpdesks, AppUser currentUser)`
(Zeilen 108-118) führt ausschließlich die benannte Abfrage
`NamedQueryEnums.Helpdesk.CloseHelpdesksFromMaintenance` mit dem Abschlussstatus und einer Liste von
IDs aus und gibt stets `Result.AsSuccess()` zurück. Die beim Einzelabschluss
(`CloseHelpdesk(AppUser, int helpdeskI3D, …)`) ausgeführten Folgeaktionen — Löschen der zugehörigen
Aufgaben, Historieneintrag `HelpdeskHistoryType.Close`, Kundenaktivität, Benachrichtigung —
unterbleiben.
**Offene Frage:** Ist das Auslassen der Folgeaktionen beim Sammelabschluss fachlich gewollt (etwa
weil es sich um eine reine Datenbereinigung handelt), oder handelt es sich um eine Lücke in der
Nachvollziehbarkeit?
**Was zur Bestätigung fehlt:** Die Aufrufstellen des Sammelabschlusses und die fachliche Absicht des
Wartungsvorgangs. Der Name der benannten Abfrage („FromMaintenance") deutet auf eine Bereinigung
hin, belegt sie aber nicht.
**Warum als Hypothese geführt:** Der Sammelabschluss verändert Ticketzustände ohne Protokolleintrag.
Ob das zulässig ist, lässt sich aus den Artefakten nicht entscheiden.
---
## SwRS-085 — Bankzugangsdaten der finAPI-Anbindung
| | |
|---|---|
| **Ebene** | SwRS |
| **Typ** | Sicherheit |
| **Übernahmewürdigkeit** | übernehmen |
**Belegte Beobachtung:** `Centron.APIs.FinAPI/Data/` modelliert `AccessToken`, `Account`,
`AccountCapability`, `AccountInterface`, `AccountInterfacePaymentCapabilities`, `AccountList`,
`AccountParams` und `AccountReference`. Eine Klasse für dauerhaft gespeicherte Bankzugangsdaten des
Kunden (Zugangskennung, PIN) besteht in dieser Bibliothek nicht.
**Offene Frage:** Speichert das System an anderer Stelle — etwa im Zweig `Finances/OnlineBanking` oder
in der Datenbank — Bankzugangsdaten des Kunden im Klartext oder verschlüsselt?
**Was zur Bestätigung fehlt:** Eine vollständige Durchsicht des Zweigs `Finances/OnlineBanking` sowie
eine Suche im Datenbankschema nach Feldern für Bankzugangsdaten. Die Abwesenheit einer entsprechenden
Klasse in der API-Bibliothek ist kein Beweis für die Abwesenheit im Gesamtsystem.
**Warum als Hypothese geführt:** Die Aussage ist sicherheitsrelevant und stützt sich auf das Fehlen
eines Artefakts, nicht auf eine durchgesetzte Regel. Ein Negativbefund aus einer Teilmenge trägt die
Aussage nicht.
@@ -0,0 +1,330 @@
# Traceability-Tabelle
Konsolidierte Forward- und Backward-Traceability über die drei Ebenen.
Die Tabelle wird aus den Feldern `Tracelinks` und `Belege` der Anforderungsdateien abgeleitet.
Spalte `Artefaktbeleg` nennt den ersten `PRIMÄR`-Beleg der SwRS-Anforderung (bei Zeilen ohne SwRS den der SyRS- beziehungsweise StRS-Anforderung).
Ein Strich bedeutet, dass auf dieser Ebene keine eigene Anforderung besteht.
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg |
|---|---|---|---|
| StRS-001 | SyRS-001 | — | `src/backend/Centron.BL/Accounts/AccountBL.cs`, Rechteprüfung über `new AppRightsBL(Session).CheckRightsFromUser(currentUserI3D, …)` mit anschließender Prüfung `checkRightsResult.Contains(CREATE_CUSTOMER) == false` |
| StRS-001 | SyRS-002 | SwRS-002 | `src/centron/Centron.WPF.UI/Modules/CentronModule.cs`, Prüfung `module.SupportsConnectionTypes` mit Verzweigung auf `CentronConnectionType.CentronWebServices` |
| StRS-001 | SyRS-002 | SwRS-006 | `src/backend/Centron.Entities/Entities/BaseEntity.cs`, `BaseLongEntity.cs`, `DBEntity.cs`, `PersistedEntity.cs`, `PersistedLongEntity.cs` |
| StRS-001 | SyRS-002 | SwRS-056 | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `AddSurvey`, Zeilen 209-233, mit der Bedingung `if (contact.Data != null)` |
| StRS-001 | SyRS-002 | SwRS-193 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Adressen/CRM", Registrierung `AccountContractsAppModuleController` mit `IsAccountManagementActive` und `SHOW_CONTRACT` |
| StRS-001 | SyRS-003 | SwRS-018 | `docs/reference/receipts/receipts-backend-architecture.md`, Abschnitt „Address Information" mit der Aufzählung der kopierten Adressfelder in `ReceiptBase` |
| StRS-001 | SyRS-003 | SwRS-143 | `src/backend/Centron.Entities/Entities/Sales/CustomerAssets/CustomerAsset.cs`, Zeilen 14-48, die vier Betreuerfelder mit ihren Kommentaren und die berechnete `Address` |
| StRS-001 | SyRS-084 | SwRS-083 | `src/backend/Centron.BL/Sales/Receipts/Orders/OrderSpecificLogic.cs`, `BlockNewReceiptsDunningLevel`, Zeilen 687-693 |
| StRS-001 | SyRS-183 | SwRS-016 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Block `if (isTemplate) { data.IgnoreCallbacks = true; … }` mit dem Kommentar „We automatically ignore all callbacks when saving a receipt-template" |
| StRS-001 | SyRS-183 | SwRS-183 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetReceiptsForAccountActivity` (Zeile 540), `GetAccountActivitiesForReceipt` (Zeile 545) mit `loadActivitiesFromProcessedReceipts`, `SaveAccountActivityForReceipt` (Zeile 623), `DeleteAccountActivityForReceipt` (Zeile 629) |
| StRS-002 | — | — | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Adressen/CRM", Bedingung `() => !CentronCache.Instance.CrmSettings.IsAccountManagementActive.GetValueOrDefault(false)` |
| StRS-003 | SyRS-010 | SwRS-005 | `SSMS_DB_SCHEMA.sql`, Tabellen `AngKopf`, `AufKopf`, `LiefKopf`, `RechKopf`, `VertragKopf`, `GutKopf`, `AbholKopf` mit ihren Positionstabellen |
| StRS-003 | SyRS-010 | SwRS-009 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt` mit `return this.Session.WithTransaction(() => { … })` |
| StRS-003 | SyRS-010 | SwRS-010 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt(IReceiptBase receipt, …)`, Zeilen 3519-3521 mit `MakeGenericMethod(...).Invoke(...)` |
| StRS-003 | SyRS-010 | SwRS-024 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetReceiptProgression`, Zeile 4767, mit Parameter `limit` |
| StRS-003 | SyRS-010 | SwRS-026 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „Validate DeliveryList: Related to order with down payments?", Zeile 2483 |
| StRS-003 | SyRS-018 | SwRS-018 | `docs/reference/receipts/receipts-backend-architecture.md`, Abschnitt „Address Information" mit der Aufzählung der kopierten Adressfelder in `ReceiptBase` |
| StRS-003 | SyRS-018 | SwRS-191 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „IReceiptWithLeasingAndService", Zeile 2838 |
| StRS-003 | SyRS-019 | SwRS-019 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetHelpdeskInfosForReceipt` (Zeile 4405) und `CreateTicketsForReceipt` (Zeile 4445) |
| StRS-004 | SyRS-067 | SwRS-068 | `src/apis/Centron.Api.Gls/CentronGlsErrors.cs` und `src/apis/Centron.Api.Shipcloud/Entities/` |
| StRS-004 | SyRS-067 | SwRS-069 | `src/backend/Centron.BL/Sales/Receipts/ShipcloudPackageTemplateBL.cs` |
| StRS-005 | SyRS-006 | — | `src/backend/Centron.BL/Warehousing/TaxBL.cs`, `GetActiveVatThroughNextVats`, Zeilen 45-54 |
| StRS-005 | SyRS-020 | SwRS-003 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, `Result<LoggedInUser>.AsError(..., DefaultMessageCodes.NoUsernameOrPassword)` |
| StRS-005 | SyRS-020 | SwRS-020 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, die vier genannten Methoden mit den Aufrufen von `_specificLogics.Execute(..., f => f.HasRightToCreateANewReceipt/HasRightToEditReceipt/HasRightToViewReceipt)` |
| StRS-006 | — | — | `src/webservice/Centron.WebServices.Core/EntitiesWrongPlace/Administration/Rights/UserRightsConst.cs`, Klasse `CustomerCommon.CreditVoucher`, Zeile 2331 |
| StRS-007 | — | — | `src/backend/Centron.BL/Administration/Company/NumberGroupEnum.cs`, Werte `PickupList = 5`, `CashOffer = 20`, `CashInvoice = 21` |
| StRS-008 | SyRS-030 | SwRS-017 | `SSMS_DB_SCHEMA.sql`, Tabelle `Zahkond` |
| StRS-008 | SyRS-030 | SwRS-030 | `src/backend/Centron.Entities/Entities/Sales/Receipts/ContractLists/ReceiptContract.cs`, die genannten Eigenschaften |
| StRS-008 | SyRS-033 | SwRS-033 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `SearchSpecialArticleToContractHead`, Zeilen 319-327 |
| StRS-008 | SyRS-033 | SwRS-088 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `CreateSpecialArticleToContractFromMspEvaluation`, Zeile 129 |
| StRS-008 | SyRS-033 | SwRS-197 | `src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleImportBL.cs` |
| StRS-008 | SyRS-085 | SwRS-084 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „Mandat" in `ForwardReceipt`, Zeile 2831 |
| StRS-009 | SyRS-032 | SwRS-032 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `SearchCustomers` mit `NamedQueryAccess<AutomaticFacturaCustomer>().GetNamedQuery(NamedQueryEnums.Asset.GetCustomersForAutomatedBilling)` (Zeile 457) und `SearchBillingOrders` mit `GetOrdersForAutomatedBilling` (Zeile 118) |
| StRS-010 | — | — | `src/backend/Centron.Entities/Entities/Sales/Receipts/MasterDataLists/MasterDataList.cs`, Eigenschaft `CounterDevice` |
| StRS-011 | — | — | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Abrechnung", Registrierung `FlatRateProjectAppModuleController` mit `Helper.HasRights(…FLATRATE_BILLING_MODULE)` |
| StRS-012 | SyRS-030 | SwRS-017 | `SSMS_DB_SCHEMA.sql`, Tabelle `Zahkond` |
| StRS-012 | SyRS-030 | SwRS-030 | `src/backend/Centron.Entities/Entities/Sales/Receipts/ContractLists/ReceiptContract.cs`, die genannten Eigenschaften |
| StRS-012 | SyRS-035 | SwRS-035 | `src/backend/Centron.BL/Sales/CustomerAssets/TimerBilling/TimerBillingBL.cs`, `SearchTimers` (Zeile 233), `GetContracts(List<int> customerI3Ds, List<int> alwaysIncludeContractI3Ds)` (Zeile 153) |
| StRS-012 | SyRS-035 | SwRS-180 | `SSMS_DB_SCHEMA.sql`, Tabelle `ArticleWorkItems` |
| StRS-012 | SyRS-036 | SwRS-036 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerBL.cs`, `CalculateHourlySurchargeRateOverlaps` in den Zeilen 173, 180, 187 und 235 |
| StRS-013 | SyRS-034 | SwRS-034 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `GetRightsForModule`, Zeilen 220-223, `_modules.FirstOrDefault(f => f.ModuleType == controller.GetType())?.GetRights()` |
| StRS-013 | SyRS-034 | SwRS-109 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Zeilen 249-254 und 405-408, die beiden Bedingungen für persönliche und administrative Tokenverwaltung |
| StRS-014 | SyRS-035 | SwRS-035 | `src/backend/Centron.BL/Sales/CustomerAssets/TimerBilling/TimerBillingBL.cs`, `SearchTimers` (Zeile 233), `GetContracts(List<int> customerI3Ds, List<int> alwaysIncludeContractI3Ds)` (Zeile 153) |
| StRS-014 | SyRS-035 | SwRS-180 | `SSMS_DB_SCHEMA.sql`, Tabelle `ArticleWorkItems` |
| StRS-014 | SyRS-036 | SwRS-036 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerBL.cs`, `CalculateHourlySurchargeRateOverlaps` in den Zeilen 173, 180, 187 und 235 |
| StRS-014 | SyRS-040 | SwRS-040 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimeRecordingBL.cs`, Signaturen mit `string guid` in `PauseRecording` (Zeile 277), `ResumeRecording` (317), `StopRecording` (357), `ClearRecording` (398) |
| StRS-014 | SyRS-042 | SwRS-042 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs`, `AddSignature` (Zeile 31) mit vorangehender Prüfung `HelpdeskSignatureExists` (Zeile 62) und `GetSignature` (Zeile 67) |
| StRS-014 | SyRS-042 | SwRS-043 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs`, Zeile 51, Aufruf `AddSignatureLog(new HelpdeskTimerBL(this.Session).GetHelpdeskTimerByI3D(helpdeskTimerI3D), currentUser)` |
| StRS-014 | SyRS-182 | SwRS-182 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerBL.cs`, `GetEmployeeTimeStatistics(ICollection<int> articleI3Ds, …)`, Zeile 710 |
| StRS-015 | — | — | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs`, `AddSignature` Zeile 31 mit Prüfung `HelpdeskSignatureExists` Zeile 62 |
| StRS-016 | SyRS-019 | SwRS-019 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetHelpdeskInfosForReceipt` (Zeile 4405) und `CreateTicketsForReceipt` (Zeile 4445) |
| StRS-016 | SyRS-050 | SwRS-050 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `DoValidateMandatoryFields`, Zeile 658, mit `var messageBuilder = new StringBuilder();` und `messageBuilder.AppendLine("Kein Kunde ausgewählt");` |
| StRS-016 | SyRS-051 | SwRS-051 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `DoBeforeSave`, Zeilen 310-326 |
| StRS-016 | SyRS-051 | SwRS-054 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `CheckUserRigths`, Zeilen 433-443, mit `else { entity.ClosedAt = null; }` |
| StRS-016 | SyRS-051 | SwRS-057 | `src/backend/Centron.BL/Sales/Support/` mit den genannten 49 Klassen |
| StRS-016 | SyRS-054 | SwRS-007 | `src/backend/Centron.BL/Warehousing/TaxBL.cs`, `UpdateArticleVATs` mit `NamedQueryAccess<Article>().GetNamedQuery(NamedQueryEnums.ValueAddedTax.UpdateArticleVatsAndPrices, parameters)` |
| StRS-016 | SyRS-054 | SwRS-054 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `CheckUserRigths`, Zeilen 433-443, mit `else { entity.ClosedAt = null; }` |
| StRS-016 | SyRS-054 | SwRS-055 | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `CloseHelpdesk(IList<HelpdeskCompact>, AppUser)`, Zeilen 108-118 |
| StRS-016 | SyRS-054 | SwRS-202 | `src/backend/Centron.BL/ItPlanner/ChecklistVirtualObjectCategoryBL.cs` |
| StRS-016 | SyRS-057 | SwRS-057 | `src/backend/Centron.BL/Sales/Support/` mit den genannten 49 Klassen |
| StRS-016 | SyRS-057 | SwRS-213 | `src/backend/Centron.BL/Sales/Support/ExternalToolsReplacementBL.cs` |
| StRS-016 | SyRS-058 | SwRS-058 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/` mit den neun genannten Reiterkomponenten und `TicketPatternTree.razor` |
| StRS-016 | SyRS-058 | SwRS-125 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/SelfCareFormFieldGrid.razor` und `SelfCareFormFieldEditPopup.razor` |
| StRS-016 | SyRS-058 | SwRS-195 | `src/backend/Centron.BL/Sales/Support/TicketProcess/` und `src/backend/Centron.BL/TicketProjects/TicketProjectBL.cs` |
| StRS-016 | SyRS-059 | SwRS-059 | `src/nexus/CentronNexus/ServiceBoard/CachedTicketList/Components/` mit `FilterEditorGroup.razor`, `ConditionalFormattingEditor.razor`, `SummaryEditor.razor`, `KanbanBucketSelection.razor` |
| StRS-016 | SyRS-125 | SwRS-058 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/` mit den neun genannten Reiterkomponenten und `TicketPatternTree.razor` |
| StRS-016 | SyRS-125 | SwRS-125 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/SelfCareFormFieldGrid.razor` und `SelfCareFormFieldEditPopup.razor` |
| StRS-016 | SyRS-183 | SwRS-016 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Block `if (isTemplate) { data.IgnoreCallbacks = true; … }` mit dem Kommentar „We automatically ignore all callbacks when saving a receipt-template" |
| StRS-016 | SyRS-183 | SwRS-183 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetReceiptsForAccountActivity` (Zeile 540), `GetAccountActivitiesForReceipt` (Zeile 545) mit `loadActivitiesFromProcessedReceipts`, `SaveAccountActivityForReceipt` (Zeile 623), `DeleteAccountActivityForReceipt` (Zeile 629) |
| StRS-017 | SyRS-120 | SwRS-025 | `src/backend/Centron.BL/Sales/Receipts/ReceiptCartReleaseSystemBL.cs` |
| StRS-017 | SyRS-120 | SwRS-120 | `src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs`, `GetWebRightByI3D` (Zeile 121), `GetWebRightsCategoriesByI3D` (Zeile 126), `GetAllWebRightsFromWebAccount` (Zeile 141) |
| StRS-017 | SyRS-120 | SwRS-121 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CanUserViewReceipt` mit `if (loggedInUser.IsWebAccountLogin)` |
| StRS-018 | SyRS-055 | — | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `CanCloseHelpdesk`, Zeilen 159-167 |
| StRS-018 | SyRS-060 | SwRS-060 | `src/backend/Centron.BL/CustomerArea/RmaBL.cs`, Verwendungen von `BarcodeState.*` in den Zeilen 179, 192, 201, 266, 312-313 |
| StRS-019 | — | — | `src/backend/Centron.BL/CheckListArea/CentronChecklistBL.cs` und `CheckListArea/ChangeTracking/` |
| StRS-020 | — | — | `src/nexus/CentronNexus/Management/TaskManagement/Components/TaskTabTickets.razor` |
| StRS-021 | SyRS-060 | SwRS-060 | `src/backend/Centron.BL/CustomerArea/RmaBL.cs`, Verwendungen von `BarcodeState.*` in den Zeilen 179, 192, 201, 266, 312-313 |
| StRS-021 | SyRS-066 | SwRS-067 | `src/backend/Centron.BL/Warehousing/ArticleManagement/` mit den neun genannten Klassen |
| StRS-022 | SyRS-062 | SwRS-062 | `src/backend/Centron.BL/Warehousing/InventoryManagement/InventoryNewBL.cs`, `ChangeInventoryGroup` (Zeile 331) und `GetInventoryGroupArticles` (Zeile 251) |
| StRS-022 | SyRS-062 | SwRS-063 | `src/backend/Centron.BL/Warehousing/InventoryManagement/InventoryBL.cs` und `InventoryNewBL.cs` |
| StRS-023 | SyRS-063 | SwRS-064 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `UpdateReceiptQuantityPicked`, Zeile 5031 |
| StRS-024 | SyRS-070 | SwRS-070 | `src/backend/Centron.BL/Sales/Receipts/SupplierOrders/`, `SupplierDeliveryLists/`, `SupplierInvoices/`, `SupplierCreditVouchers/` |
| StRS-024 | SyRS-073 | SwRS-073 | `src/apis/Centron.APIs.CopDataAccess/CopApi.cs`, `CopException.cs`, `Data/` |
| StRS-024 | SyRS-075 | SwRS-075 | `src/backend/Centron.BL/Purchasing/OrderSuggestionList/` |
| StRS-024 | SyRS-076 | SwRS-076 | `src/backend/Centron.BL/Purchasing/SupplierOrderPerBranchBL.cs` |
| StRS-024 | SyRS-076 | SwRS-199 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Buchhaltung/Finanzen", Kommentar „Kalkulation pro Filiale" |
| StRS-025 | SyRS-071 | SwRS-071 | `src/backend/Centron.BL/EDI/EDIDispatcherBL.cs` und `EDICommonBL.cs` |
| StRS-025 | SyRS-071 | SwRS-072 | `src/backend/Centron.BL/EDI/Zugferd/ZUGFeRD_BL.cs`, `ReadInvoice`, Zeile 38, mit den Parametern `List<IEDIReceiptHead>` und `List<List<IEDIReceiptItems>>` |
| StRS-025 | SyRS-071 | SwRS-087 | `src/backend/Centron.BL/DataExchange/` mit den zehn genannten Unterzweigen |
| StRS-025 | SyRS-072 | SwRS-071 | `src/backend/Centron.BL/EDI/EDIDispatcherBL.cs` und `EDICommonBL.cs` |
| StRS-025 | SyRS-072 | SwRS-072 | `src/backend/Centron.BL/EDI/Zugferd/ZUGFeRD_BL.cs`, `ReadInvoice`, Zeile 38, mit den Parametern `List<IEDIReceiptHead>` und `List<List<IEDIReceiptItems>>` |
| StRS-026 | — | — | `src/backend/Centron.BL/EDI/Zugferd/ZUGFeRD_BL.cs`, `ReadInvoice`, Zeile 38 |
| StRS-027 | SyRS-009 | SwRS-080 | `SSMS_DB_SCHEMA.sql`, Tabellen `ArtikelBranchErloeskonto`, `UnterwarenFilialeErloeskonto`, `WarenFilialeErloeskonto` |
| StRS-027 | SyRS-080 | SwRS-080 | `SSMS_DB_SCHEMA.sql`, Tabellen `ArtikelBranchErloeskonto`, `UnterwarenFilialeErloeskonto`, `WarenFilialeErloeskonto` |
| StRS-027 | SyRS-080 | SwRS-198 | `SSMS_DB_SCHEMA.sql`, Tabellen `Kostenstellen`, `Kostentraeger` |
| StRS-027 | SyRS-080 | SwRS-199 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Buchhaltung/Finanzen", Kommentar „Kalkulation pro Filiale" |
| StRS-028 | SyRS-017 | SwRS-017 | `SSMS_DB_SCHEMA.sql`, Tabelle `Zahkond` |
| StRS-028 | SyRS-081 | SwRS-081 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `UpdateReceiptIsPaid(…, string moduleOrAction, AppUser currentUser)`, Zeile 4902 |
| StRS-028 | SyRS-086 | SwRS-085 | `src/apis/Centron.APIs.FinAPI/Data/AccessToken.cs` |
| StRS-028 | SyRS-087 | SwRS-086 | `src/backend/Centron.BL/Finances/IncomingPayments/IncomingPaymentBL.cs`, `CreateIncomingPaymentLogItem(IncomingPaymentLog logItem)`, Zeile 21 |
| StRS-028 | SyRS-088 | SwRS-087 | `src/backend/Centron.BL/DataExchange/` mit den zehn genannten Unterzweigen |
| StRS-029 | SyRS-082 | SwRS-082 | `src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs`, Zeilen 253-270, Zuweisungen `invoice.DunningLevel1Date = DateTime.Now; invoice.DunningLevel1Employee = loggedInUser.UserI3D;` |
| StRS-029 | SyRS-083 | SwRS-082 | `src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs`, Zeilen 253-270, Zuweisungen `invoice.DunningLevel1Date = DateTime.Now; invoice.DunningLevel1Employee = loggedInUser.UserI3D;` |
| StRS-029 | SyRS-085 | SwRS-084 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „Mandat" in `ForwardReceipt`, Zeile 2831 |
| StRS-030 | SyRS-084 | SwRS-083 | `src/backend/Centron.BL/Sales/Receipts/Orders/OrderSpecificLogic.cs`, `BlockNewReceiptsDunningLevel`, Zeilen 687-693 |
| StRS-031 | SyRS-001 | — | `src/backend/Centron.BL/Accounts/AccountBL.cs`, Rechteprüfung über `new AppRightsBL(Session).CheckRightsFromUser(currentUserI3D, …)` mit anschließender Prüfung `checkRightsResult.Contains(CREATE_CUSTOMER) == false` |
| StRS-031 | SyRS-020 | SwRS-003 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, `Result<LoggedInUser>.AsError(..., DefaultMessageCodes.NoUsernameOrPassword)` |
| StRS-031 | SyRS-020 | SwRS-020 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, die vier genannten Methoden mit den Aufrufen von `_specificLogics.Execute(..., f => f.HasRightToCreateANewReceipt/HasRightToEditReceipt/HasRightToViewReceipt)` |
| StRS-031 | SyRS-042 | SwRS-042 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs`, `AddSignature` (Zeile 31) mit vorangehender Prüfung `HelpdeskSignatureExists` (Zeile 62) und `GetSignature` (Zeile 67) |
| StRS-031 | SyRS-042 | SwRS-043 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerSignatureBL.cs`, Zeile 51, Aufruf `AddSignatureLog(new HelpdeskTimerBL(this.Session).GetHelpdeskTimerByI3D(helpdeskTimerI3D), currentUser)` |
| StRS-031 | SyRS-051 | SwRS-051 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `DoBeforeSave`, Zeilen 310-326 |
| StRS-031 | SyRS-051 | SwRS-054 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `CheckUserRigths`, Zeilen 433-443, mit `else { entity.ClosedAt = null; }` |
| StRS-031 | SyRS-051 | SwRS-057 | `src/backend/Centron.BL/Sales/Support/` mit den genannten 49 Klassen |
| StRS-031 | SyRS-065 | SwRS-066 | `SSMS_DB_SCHEMA.sql`, Tabellen `Produktfamilie`, `ProduktfamilieKundenSperren`, `ProduktfamiliePositionSperren` |
| StRS-031 | SyRS-065 | SwRS-067 | `src/backend/Centron.BL/Warehousing/ArticleManagement/` mit den neun genannten Klassen |
| StRS-031 | SyRS-086 | SwRS-085 | `src/apis/Centron.APIs.FinAPI/Data/AccessToken.cs` |
| StRS-031 | SyRS-090 | SwRS-090 | `src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs`, `GetRightsFromCurrentUser` (Zeile 63) und `CheckRightsFromUser` (Zeile 93) |
| StRS-031 | SyRS-091 | SwRS-003 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, `Result<LoggedInUser>.AsError(..., DefaultMessageCodes.NoUsernameOrPassword)` |
| StRS-031 | SyRS-091 | SwRS-091 | `src/webservice/Centron.Controllers/Authorization/AuthorizeUserRightAttribute.cs`, `AuthorizeAnyUserRightAttribute.cs`, `AuthorizeAllUserRightsAttribute.cs` |
| StRS-031 | SyRS-102 | SwRS-101 | `src/backend/Centron.Interfaces/Administration/Logins/ApplicationKind.cs` |
| StRS-031 | SyRS-102 | SwRS-212 | `src/backend/Centron.BL/Mobile/MobileBL.cs` und `src/backend/Centron.Entities/Entities/Mobile/` |
| StRS-031 | SyRS-109 | SwRS-108 | `src/backend/Centron.BL/Administration/AccessTokens/AccessTokenBL.cs`, `_logBL.LogAction(accessToken, AccessTokenLogActionType.Created, …, ipAddress)` (Zeile 185) und die `ValidationFailed`-Aufrufe (Zeilen 396, 403) |
| StRS-031 | SyRS-109 | SwRS-109 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Zeilen 249-254 und 405-408, die beiden Bedingungen für persönliche und administrative Tokenverwaltung |
| StRS-031 | SyRS-170 | SwRS-034 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `GetRightsForModule`, Zeilen 220-223, `_modules.FirstOrDefault(f => f.ModuleType == controller.GetType())?.GetRights()` |
| StRS-031 | SyRS-170 | SwRS-170 | `src/backend/Centron.BL/Statistics/` mit den neun genannten Unterbereichen |
| StRS-031 | SyRS-170 | SwRS-190 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Controlling/Analytics", Kommentar „Vertragsauswertung" mit der Registrierung von `ContractEvaluation2` |
| StRS-031 | SyRS-170 | SwRS-210 | `src/webservice/…/UserRightsConst.cs`, Klasse `VideoPortal`, Zeile 2786 |
| StRS-031 | SyRS-170 | SwRS-215 | `src/nexus/CentronNexus/ServiceBoard/Dashboard/DashboardMyTicketStats.razor`, `DashboardMyTimerecordStats.razor`, `DashboardMyDayList.razor` |
| StRS-031 | SyRS-176 | SwRS-176 | `src/backend/Centron.BL/MassUpdate/MassUpdateBL.cs` und `src/backend/Centron.Entities/Entities/MassUpdate/` |
| StRS-031 | SyRS-176 | SwRS-197 | `src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleImportBL.cs` |
| StRS-031 | SyRS-177 | SwRS-177 | `src/backend/Centron.BL/Administration/Licensing/LicenseManager.cs`, `SettingsForWebService`, Zeilen 70-95, mit `GetDatabaseInfosForLicenseServer()` und dem Debug-Zweig |
| StRS-032 | SyRS-020 | SwRS-003 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, `Result<LoggedInUser>.AsError(..., DefaultMessageCodes.NoUsernameOrPassword)` |
| StRS-032 | SyRS-020 | SwRS-020 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, die vier genannten Methoden mit den Aufrufen von `_specificLogics.Execute(..., f => f.HasRightToCreateANewReceipt/HasRightToEditReceipt/HasRightToViewReceipt)` |
| StRS-032 | SyRS-057 | SwRS-057 | `src/backend/Centron.BL/Sales/Support/` mit den genannten 49 Klassen |
| StRS-032 | SyRS-057 | SwRS-213 | `src/backend/Centron.BL/Sales/Support/ExternalToolsReplacementBL.cs` |
| StRS-032 | SyRS-092 | SwRS-020 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, die vier genannten Methoden mit den Aufrufen von `_specificLogics.Execute(..., f => f.HasRightToCreateANewReceipt/HasRightToEditReceipt/HasRightToViewReceipt)` |
| StRS-032 | SyRS-092 | SwRS-092 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CanUserEditReceipt` mit `BranchBL.IsBranchEqual(...)` gegenüber `CanUserCreateReceiptsInBranch` mit eigener Vergleichslogik, Zeilen 10258-10296 |
| StRS-033 | SyRS-056 | SwRS-056 | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `AddSurvey`, Zeilen 209-233, mit der Bedingung `if (contact.Data != null)` |
| StRS-033 | SyRS-056 | SwRS-203 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `AddShortDescriptionPrefix` mit `new AppSettingsBL(this.Session).GetSettings(ApplicationSettingID.IsHelpdeskShortDescriptionPrefixActivated, ApplicationSettingID.HelpdeskShortDescriptionPrefix)` und den typisierten Zugriffen mit Vorgabewert |
| StRS-033 | SyRS-100 | SwRS-100 | `src/backend/Centron.BL/Administration/Logins/TicketBL.cs`, `CreateNewTicket` mit `this.GetTicketSalt(deviceID)`, Zeilen 61-70 |
| StRS-033 | SyRS-102 | SwRS-101 | `src/backend/Centron.Interfaces/Administration/Logins/ApplicationKind.cs` |
| StRS-033 | SyRS-102 | SwRS-212 | `src/backend/Centron.BL/Mobile/MobileBL.cs` und `src/backend/Centron.Entities/Entities/Mobile/` |
| StRS-033 | SyRS-105 | SwRS-104 | `src/backend/Centron.BL/Administration/Logins/TwoFactor/ITwoFactorValidator.cs` mit den beiden Implementierungen |
| StRS-033 | SyRS-106 | SwRS-105 | `src/backend/Centron.BL/Administration/Logins/Auth/Authenticator.cs`, Klasse `AuthObject`, Zeilen 21-41, mit `RequestId` und überschriebenem `ToString()` |
| StRS-033 | SyRS-106 | SwRS-106 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, Zeilen 47-56 |
| StRS-033 | SyRS-107 | SwRS-106 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, Zeilen 47-56 |
| StRS-034 | SyRS-076 | SwRS-076 | `src/backend/Centron.BL/Purchasing/SupplierOrderPerBranchBL.cs` |
| StRS-034 | SyRS-076 | SwRS-199 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Buchhaltung/Finanzen", Kommentar „Kalkulation pro Filiale" |
| StRS-034 | SyRS-092 | SwRS-020 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, die vier genannten Methoden mit den Aufrufen von `_specificLogics.Execute(..., f => f.HasRightToCreateANewReceipt/HasRightToEditReceipt/HasRightToViewReceipt)` |
| StRS-034 | SyRS-092 | SwRS-092 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CanUserEditReceipt` mit `BranchBL.IsBranchEqual(...)` gegenüber `CanUserCreateReceiptsInBranch` mit eigener Vergleichslogik, Zeilen 10258-10296 |
| StRS-034 | SyRS-093 | SwRS-093 | `src/backend/Centron.BL/Administration/Mandatory/MandatoryBL.cs`, `GetNumberGroup`, Zeilen 55-81, `if (ModuleFeatures.IsNumberGroupRefactoringAvailable) { … } else { … }` |
| StRS-034 | SyRS-093 | SwRS-192 | `src/backend/Centron.BL/Administration/Company/NumberGroupEnum.cs`, `CRMProject = 24` |
| StRS-035 | SyRS-093 | SwRS-093 | `src/backend/Centron.BL/Administration/Mandatory/MandatoryBL.cs`, `GetNumberGroup`, Zeilen 55-81, `if (ModuleFeatures.IsNumberGroupRefactoringAvailable) { … } else { … }` |
| StRS-035 | SyRS-093 | SwRS-192 | `src/backend/Centron.BL/Administration/Company/NumberGroupEnum.cs`, `CRMProject = 24` |
| StRS-035 | SyRS-094 | SwRS-094 | `src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs`, Zeilen 78-91 |
| StRS-035 | SyRS-094 | SwRS-095 | `src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs`, `FindNextNumber`, Zeilen 116-131, Interpolation von `{tableName}`, `{fieldName}` und `{counter}` |
| StRS-035 | SyRS-095 | SwRS-095 | `src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs`, `FindNextNumber`, Zeilen 116-131, Interpolation von `{tableName}`, `{fieldName}` und `{counter}` |
| StRS-036 | SyRS-089 | SwRS-088 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `CreateSpecialArticleToContractFromMspEvaluation`, Zeile 129 |
| StRS-036 | SyRS-103 | SwRS-101 | `src/backend/Centron.Interfaces/Administration/Logins/ApplicationKind.cs` |
| StRS-036 | SyRS-103 | SwRS-102 | `src/backend/Centron.Interfaces/Administration/Logins/LicenseGuids.cs` |
| StRS-036 | SyRS-103 | SwRS-177 | `src/backend/Centron.BL/Administration/Licensing/LicenseManager.cs`, `SettingsForWebService`, Zeilen 70-95, mit `GetDatabaseInfosForLicenseServer()` und dem Debug-Zweig |
| StRS-036 | SyRS-109 | SwRS-108 | `src/backend/Centron.BL/Administration/AccessTokens/AccessTokenBL.cs`, `_logBL.LogAction(accessToken, AccessTokenLogActionType.Created, …, ipAddress)` (Zeile 185) und die `ValidationFailed`-Aufrufe (Zeilen 396, 403) |
| StRS-036 | SyRS-109 | SwRS-109 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Zeilen 249-254 und 405-408, die beiden Bedingungen für persönliche und administrative Tokenverwaltung |
| StRS-037 | SyRS-104 | SwRS-100 | `src/backend/Centron.BL/Administration/Logins/TicketBL.cs`, `CreateNewTicket` mit `this.GetTicketSalt(deviceID)`, Zeilen 61-70 |
| StRS-037 | SyRS-104 | SwRS-103 | `src/backend/Centron.BL/Administration/Logins/Auth/Authenticator.cs`, Feld `_getExistingOrCreateTicketLock` und die `lock`-Klammer in `AuthenticateUser` |
| StRS-038 | SyRS-110 | SwRS-028 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `ForwardReceipt` mit `IList<int> receiptProjectLayoutItemI3DsToForward` und `CreateFullReportForReceipt` mit `IList<ReceiptProjectLayoutItem> layoutItems` |
| StRS-038 | SyRS-110 | SwRS-029 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `new SwitzerlandSettingsController()` in `GetSettingsWithoutModule()` |
| StRS-038 | SyRS-110 | SwRS-110 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CreateFullReportForReceipt` (Zeile 3221) und `CreateReportPreviewForReceipt` (Zeile 3177), beide mit `CreateFullReportConfiguration` |
| StRS-038 | SyRS-110 | SwRS-178 | `src/backend/Centron.BL/ReportEngine/` mit den zwölf genannten Bestandteilen |
| StRS-038 | SyRS-124 | SwRS-124 | `src/backend/Centron.BL/Administration/FileManagement/SharedDocumentBL.cs` |
| StRS-038 | SyRS-160 | SwRS-126 | `src/nexus/CentronNexus/Configuration/` mit den 13 genannten Konfigurationsklassen und dem Verzeichnis `Migrations` |
| StRS-038 | SyRS-160 | SwRS-160 | `docker/Dockerfile`, zweistufiger Bau mit `FROM … sdk … AS base` und `FROM … runtime …` sowie `dotnet publish … --self-contained true` |
| StRS-038 | SyRS-160 | SwRS-174 | `src/webservice/Centron.Host/`, `Centron.Host.Console/`, `Centron.Host.WindowsService/` als getrennte Projekte mit gemeinsamer Kernabhängigkeit |
| StRS-038 | SyRS-178 | SwRS-178 | `src/backend/Centron.BL/ReportEngine/` mit den zwölf genannten Bestandteilen |
| StRS-039 | SyRS-111 | SwRS-111 | `src/backend/Centron.BL/Administration/FileManagement/DirectoryReferenceProviders/` |
| StRS-039 | SyRS-111 | SwRS-208 | `src/webservice/…/UserRightsConst.cs`, Klasse `Documentation` mit Unterklasse `Categories`, Zeilen 1847-1876 |
| StRS-039 | SyRS-166 | SwRS-122 | `src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs`, `RepairMissingWebAccountContactLinks`, Zeile 318 |
| StRS-039 | SyRS-166 | SwRS-166 | `src/backend/Centron.BL/Services/DataQuality/DirectoryCheckBL.cs`, `GetCaptionForDirectoryCheckItem`, Zeile 84 |
| StRS-040 | SyRS-068 | — | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Eintrag `new SendDeliveryListShippingConfirmationGeneralSettingsAppModueController()` |
| StRS-040 | SyRS-112 | SwRS-112 | `src/backend/Centron.BL/Mail/` mit den sieben genannten Unterzweigen |
| StRS-040 | SyRS-112 | SwRS-207 | `src/backend/Centron.BL/WebLinks/IWebLinkActionHandler.cs` mit den beiden Implementierungen |
| StRS-040 | SyRS-113 | SwRS-053 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `AddShortDescriptionPrefix` mit `new ReplacementBL().ReplaceVariables(prefix, variablesAndValues, "@@")` |
| StRS-040 | SyRS-113 | SwRS-112 | `src/backend/Centron.BL/Mail/` mit den sieben genannten Unterzweigen |
| StRS-040 | SyRS-113 | SwRS-113 | `src/backend/Centron.BL/MailScanner/MailScannerBL.cs`, `GetProfiles` (57), `GetWorkflows` (36), `SaveTasks` (118), `GetMailScannerLogs` (140) |
| StRS-040 | SyRS-114 | SwRS-114 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, die vier genannten Controller in `GetSettingsWithoutModule()` |
| StRS-040 | SyRS-114 | SwRS-204 | `src/backend/Centron.BL/AppointmentRequests/AppointmentRequestBL.cs` und `src/backend/Centron.Entities/Entities/AppointmentRequests/` |
| StRS-040 | SyRS-127 | SwRS-127 | `src/nexus/CentronNexus.OutlookAddIn/CentronNexus.OutlookAddIn.csproj` und `RazorComponentsEndpointConventionBuilderExtensions.cs` |
| StRS-041 | — | — | `src/backend/Centron.BL/MailScanner/MailScannerBL.cs`, `SaveMailScannerLog` (Zeile 133) und `GetProfiles` (57) |
| StRS-042 | SyRS-181 | SwRS-181 | `src/backend/Centron.BL/EmployeeArea/` und `src/backend/Centron.BL/Administration/Employees/` mit den genannten Klassen |
| StRS-043 | SyRS-115 | SwRS-115 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `PersonalPhoneSettingsController` in `GetPersonalSettings()` und `PhoneSettingsController` in `GetSettingsWithoutModule()` |
| StRS-044 | SyRS-004 | — | `src/backend/Centron.BL/Sales/Support/CustomerSpecialArticleBL.cs` und `src/backend/Centron.BL/Accounts/SpecialPrices/` |
| StRS-044 | SyRS-120 | SwRS-025 | `src/backend/Centron.BL/Sales/Receipts/ReceiptCartReleaseSystemBL.cs` |
| StRS-044 | SyRS-120 | SwRS-120 | `src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs`, `GetWebRightByI3D` (Zeile 121), `GetWebRightsCategoriesByI3D` (Zeile 126), `GetAllWebRightsFromWebAccount` (Zeile 141) |
| StRS-044 | SyRS-120 | SwRS-121 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CanUserViewReceipt` mit `if (loggedInUser.IsWebAccountLogin)` |
| StRS-044 | SyRS-121 | SwRS-121 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CanUserViewReceipt` mit `if (loggedInUser.IsWebAccountLogin)` |
| StRS-044 | SyRS-122 | SwRS-122 | `src/backend/Centron.BL/Administration/Logins/WebAccountBL.cs`, `RepairMissingWebAccountContactLinks`, Zeile 318 |
| StRS-044 | SyRS-125 | SwRS-058 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/` mit den neun genannten Reiterkomponenten und `TicketPatternTree.razor` |
| StRS-044 | SyRS-125 | SwRS-125 | `src/nexus/CentronNexus/Management/TicketPatterns/Components/SelfCareFormFieldGrid.razor` und `SelfCareFormFieldEditPopup.razor` |
| StRS-044 | SyRS-126 | SwRS-126 | `src/nexus/CentronNexus/Configuration/` mit den 13 genannten Konfigurationsklassen und dem Verzeichnis `Migrations` |
| StRS-044 | SyRS-127 | SwRS-127 | `src/nexus/CentronNexus.OutlookAddIn/CentronNexus.OutlookAddIn.csproj` und `RazorComponentsEndpointConventionBuilderExtensions.cs` |
| StRS-044 | SyRS-129 | SwRS-129 | `src/nexus/CentronNexus/SharedResource.resx`, `SharedResource.en-US.resx` mit den zugehörigen Designer-Klassen |
| StRS-045 | SyRS-123 | SwRS-123 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `ChangeWebReceiptState(string token, WebReceiptState webReceiptState)`, Zeile 5903 |
| StRS-045 | SyRS-123 | SwRS-124 | `src/backend/Centron.BL/Administration/FileManagement/SharedDocumentBL.cs` |
| StRS-045 | SyRS-123 | SwRS-207 | `src/backend/Centron.BL/WebLinks/IWebLinkActionHandler.cs` mit den beiden Implementierungen |
| StRS-045 | SyRS-124 | SwRS-124 | `src/backend/Centron.BL/Administration/FileManagement/SharedDocumentBL.cs` |
| StRS-046 | SyRS-054 | SwRS-007 | `src/backend/Centron.BL/Warehousing/TaxBL.cs`, `UpdateArticleVATs` mit `NamedQueryAccess<Article>().GetNamedQuery(NamedQueryEnums.ValueAddedTax.UpdateArticleVatsAndPrices, parameters)` |
| StRS-046 | SyRS-054 | SwRS-054 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `CheckUserRigths`, Zeilen 433-443, mit `else { entity.ClosedAt = null; }` |
| StRS-046 | SyRS-054 | SwRS-055 | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `CloseHelpdesk(IList<HelpdeskCompact>, AppUser)`, Zeilen 108-118 |
| StRS-046 | SyRS-054 | SwRS-202 | `src/backend/Centron.BL/ItPlanner/ChecklistVirtualObjectCategoryBL.cs` |
| StRS-047 | SyRS-108 | SwRS-107 | `src/backend/Centron.Common/TextCoding/AESCryptoLogic.cs`, Signaturen mit `string securityKey = null` und `GetKeyAndIV` mit Rückfall auf `SECURITY_KEY` |
| StRS-047 | SyRS-108 | SwRS-130 | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, Zeilen 608 und 700 |
| StRS-047 | SyRS-108 | SwRS-131 | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, Zeilen 551 und 949, `GetHotlineMasterKey()` |
| StRS-047 | SyRS-130 | — | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, Zeile 700, `propertyValue.ValueEncryptedString = new AESCryptoLogic().EncryptText(customerHotline.Password, masterKeyResult.Data)` |
| StRS-048 | SyRS-131 | SwRS-132 | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, `AddOldHotlineEntriesToCustomer`, Zeile 722, im Zusammenhang mit der Verschlüsselung Zeile 700 |
| StRS-049 | SyRS-089 | SwRS-088 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `CreateSpecialArticleToContractFromMspEvaluation`, Zeile 129 |
| StRS-049 | SyRS-140 | SwRS-140 | `src/backend/Centron.Entities/Entities/Sales/Receipts/MasterDataLists/MasterDataList.cs`, die genannten Eigenschaften |
| StRS-049 | SyRS-140 | SwRS-141 | `SSMS_DB_SCHEMA.sql`, Tabellen `AccountDevices`, `AccountDevicesToTickets` |
| StRS-049 | SyRS-140 | SwRS-142 | `SSMS_DB_SCHEMA.sql`, die 14 genannten `AssetManagement*`-Tabellen und `MonitoringServiceSettings` |
| StRS-049 | SyRS-140 | SwRS-143 | `src/backend/Centron.Entities/Entities/Sales/CustomerAssets/CustomerAsset.cs`, Zeilen 14-48, die vier Betreuerfelder mit ihren Kommentaren und die berechnete `Address` |
| StRS-050 | SyRS-150 | SwRS-150 | `src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs`, `DsgvoDeleteRightDeleteContacts` mit `deleteProtocol` und Rückgabe `Result<string>`, Zeilen 787-850 |
| StRS-050 | SyRS-150 | SwRS-151 | `src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs`, Zeilen 863-903, Anonymisierungsanweisungen mit `SET h.Status = 0, h.Name = '{DsgvoDeletedContactMessage}', h.Fon = default, …` |
| StRS-050 | SyRS-151 | SwRS-151 | `src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs`, Zeilen 863-903, Anonymisierungsanweisungen mit `SET h.Status = 0, h.Name = '{DsgvoDeletedContactMessage}', h.Fon = default, …` |
| StRS-050 | SyRS-152 | SwRS-152 | `src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs`, `GetDeletedCustomers` mit `stats.CleanUpStatsKind = DataSecurityCleanUpStatsKind.CustomersDeleted`, Zeilen 353-360 |
| StRS-051 | SyRS-007 | SwRS-007 | `src/backend/Centron.BL/Warehousing/TaxBL.cs`, `UpdateArticleVATs` mit `NamedQueryAccess<Article>().GetNamedQuery(NamedQueryEnums.ValueAddedTax.UpdateArticleVatsAndPrices, parameters)` |
| StRS-051 | SyRS-007 | SwRS-008 | `src/backend/Centron.BL/Warehousing/TaxBL.cs`, `foreach (var batch in articleI3DsWithOldTaxRate.Batch(2000))` |
| StRS-051 | SyRS-014 | SwRS-014 | `SSMS_DB_SCHEMA.sql`, Tabelle `RechKopfVersions` |
| StRS-051 | SyRS-023 | SwRS-023 | `src/centron/Centron.WPF.UI/Modules/CentronModule.cs`, `OpenModuleByObject` mit `objectKind == CentronObjectKindNumeric.HelpdeskClass` und `objectKind == CentronObjectKindNumeric.ContractClass` |
| StRS-051 | SyRS-023 | SwRS-166 | `src/backend/Centron.BL/Services/DataQuality/DirectoryCheckBL.cs`, `GetCaptionForDirectoryCheckItem`, Zeile 84 |
| StRS-051 | SyRS-023 | SwRS-206 | `src/backend/Centron.BL/Tags/TagsBL.cs` und `src/backend/Centron.Entities/Entities/Tags/` |
| StRS-051 | SyRS-071 | SwRS-071 | `src/backend/Centron.BL/EDI/EDIDispatcherBL.cs` und `EDICommonBL.cs` |
| StRS-051 | SyRS-071 | SwRS-072 | `src/backend/Centron.BL/EDI/Zugferd/ZUGFeRD_BL.cs`, `ReadInvoice`, Zeile 38, mit den Parametern `List<IEDIReceiptHead>` und `List<List<IEDIReceiptItems>>` |
| StRS-051 | SyRS-071 | SwRS-087 | `src/backend/Centron.BL/DataExchange/` mit den zehn genannten Unterzweigen |
| StRS-051 | SyRS-081 | SwRS-081 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `UpdateReceiptIsPaid(…, string moduleOrAction, AppUser currentUser)`, Zeile 4902 |
| StRS-051 | SyRS-106 | SwRS-105 | `src/backend/Centron.BL/Administration/Logins/Auth/Authenticator.cs`, Klasse `AuthObject`, Zeilen 21-41, mit `RequestId` und überschriebenem `ToString()` |
| StRS-051 | SyRS-106 | SwRS-106 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs`, Zeilen 47-56 |
| StRS-051 | SyRS-153 | SwRS-153 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Zuweisungen `receipt.CreatedAt = receipt.ChangedAt; receipt.CreatedByI3D = receipt.ChangedByI3D; receipt.CreatedThroughApplicationVersion = receipt.ChangedThroughApplicationVersion;` im Zweig `if (isNewReceipt)` |
| StRS-051 | SyRS-153 | SwRS-154 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `WriteReceiptLogs` mit `_receiptLogBL.CreateContingentKindEntry(...)` neben den Audit-Feldzuweisungen in `SaveReceipt` |
| StRS-051 | SyRS-154 | SwRS-154 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `WriteReceiptLogs` mit `_receiptLogBL.CreateContingentKindEntry(...)` neben den Audit-Feldzuweisungen in `SaveReceipt` |
| StRS-051 | SyRS-165 | SwRS-165 | `src/backend/Centron.BL/Administration/Logins/Auth/BasicAuthenticator.cs` und `Authenticator.cs`, die genannten Protokollaufrufe |
| StRS-052 | SyRS-112 | SwRS-112 | `src/backend/Centron.BL/Mail/` mit den sieben genannten Unterzweigen |
| StRS-052 | SyRS-112 | SwRS-207 | `src/backend/Centron.BL/WebLinks/IWebLinkActionHandler.cs` mit den beiden Implementierungen |
| StRS-052 | SyRS-160 | SwRS-126 | `src/nexus/CentronNexus/Configuration/` mit den 13 genannten Konfigurationsklassen und dem Verzeichnis `Migrations` |
| StRS-052 | SyRS-160 | SwRS-160 | `docker/Dockerfile`, zweistufiger Bau mit `FROM … sdk … AS base` und `FROM … runtime …` sowie `dotnet publish … --self-contained true` |
| StRS-052 | SyRS-160 | SwRS-174 | `src/webservice/Centron.Host/`, `Centron.Host.Console/`, `Centron.Host.WindowsService/` als getrennte Projekte mit gemeinsamer Kernabhängigkeit |
| StRS-052 | SyRS-163 | SwRS-163 | `.github/workflows/build.yml`, `runs-on` mit `self-hosted`, `timeout-minutes: 180` und die `if`-Bedingung auf `head.repo.full_name` |
| StRS-052 | SyRS-168 | SwRS-001 | `src/backend/Centron.BL/BLSession.cs`, `BaseBL.cs`, `DBBaseBL.cs` |
| StRS-052 | SyRS-168 | SwRS-002 | `src/centron/Centron.WPF.UI/Modules/CentronModule.cs`, Prüfung `module.SupportsConnectionTypes` mit Verzweigung auf `CentronConnectionType.CentronWebServices` |
| StRS-052 | SyRS-168 | SwRS-168 | `src/centron/Centron.WPF.UI/Modules/CentronModule.cs`, `OpenModule` mit `module.SupportsConnectionTypes.All(f => f != ClassContainer.Instance.ConnectionType)` |
| StRS-052 | SyRS-174 | SwRS-174 | `src/webservice/Centron.Host/`, `Centron.Host.Console/`, `Centron.Host.WindowsService/` als getrennte Projekte mit gemeinsamer Kernabhängigkeit |
| StRS-053 | SyRS-161 | SwRS-161 | `src/backend/Centron.BL/Administration/Scripts/ScriptMethods/IScriptMethod.cs`, `IRecurringScriptMethod.cs`, `ScriptMethodPool.cs` |
| StRS-053 | SyRS-161 | SwRS-162 | `src/backend/Centron.BL/Administration/Scripts/ScriptEngineBL.cs`, `ShouldExecuteScripts` (Zeile 37) und Parameter `currentVersionOverride` (Zeile 39) sowie der `#if DEBUG`-Block (Zeile 57 ff.) |
| StRS-053 | SyRS-162 | SwRS-162 | `src/backend/Centron.BL/Administration/Scripts/ScriptEngineBL.cs`, `ShouldExecuteScripts` (Zeile 37) und Parameter `currentVersionOverride` (Zeile 39) sowie der `#if DEBUG`-Block (Zeile 57 ff.) |
| StRS-054 | SyRS-170 | SwRS-034 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `GetRightsForModule`, Zeilen 220-223, `_modules.FirstOrDefault(f => f.ModuleType == controller.GetType())?.GetRights()` |
| StRS-054 | SyRS-170 | SwRS-170 | `src/backend/Centron.BL/Statistics/` mit den neun genannten Unterbereichen |
| StRS-054 | SyRS-170 | SwRS-190 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Controlling/Analytics", Kommentar „Vertragsauswertung" mit der Registrierung von `ContractEvaluation2` |
| StRS-054 | SyRS-170 | SwRS-210 | `src/webservice/…/UserRightsConst.cs`, Klasse `VideoPortal`, Zeile 2786 |
| StRS-054 | SyRS-170 | SwRS-215 | `src/nexus/CentronNexus/ServiceBoard/Dashboard/DashboardMyTicketStats.razor`, `DashboardMyTimerecordStats.razor`, `DashboardMyDayList.razor` |
| StRS-054 | SyRS-178 | SwRS-178 | `src/backend/Centron.BL/ReportEngine/` mit den zwölf genannten Bestandteilen |
| StRS-055 | SyRS-171 | SwRS-171 | `src/backend/Centron.BL/IndexSearch/GermanAnalyzer.cs` |
| StRS-055 | SyRS-171 | SwRS-206 | `src/backend/Centron.BL/Tags/TagsBL.cs` und `src/backend/Centron.Entities/Entities/Tags/` |
| StRS-056 | SyRS-167 | SwRS-167 | `src/backend/Centron.BL/Telemetry/TelemetryBL.cs`, `GetCompletedPendingApiCalls(DateTime maxBucketStartUtc)` (Zeile 308) und `UpsertApiCallBatch` (Zeile 173) |
| StRS-056 | SyRS-172 | SwRS-172 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `new ArtificialIntelligencePromptSettingsController()` in `GetSettingsWithoutModule()` |
| StRS-057 | — | — | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Adressen/CRM", Registrierung `CampaignAppModuleController` mit `LicenseGuids.CampaignsMailing` |
| StRS-058 | — | — | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `CreateNewReceipt(…, bool insertSalutationAndAgreement, …)`, Zeile 775 |
| StRS-059 | SyRS-108 | SwRS-107 | `src/backend/Centron.Common/TextCoding/AESCryptoLogic.cs`, Signaturen mit `string securityKey = null` und `GetKeyAndIV` mit Rückfall auf `SECURITY_KEY` |
| StRS-059 | SyRS-108 | SwRS-130 | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, Zeilen 608 und 700 |
| StRS-059 | SyRS-108 | SwRS-131 | `src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs`, Zeilen 551 und 949, `GetHotlineMasterKey()` |
| StRS-060 | SyRS-180 | SwRS-180 | `SSMS_DB_SCHEMA.sql`, Tabelle `ArticleWorkItems` |
| StRS-061 | SyRS-181 | SwRS-181 | `src/backend/Centron.BL/EmployeeArea/` und `src/backend/Centron.BL/Administration/Employees/` mit den genannten Klassen |
| StRS-061 | SyRS-182 | SwRS-182 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimerBL.cs`, `GetEmployeeTimeStatistics(ICollection<int> articleI3Ds, …)`, Zeile 710 |
| StRS-062 | SyRS-033 | SwRS-033 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `SearchSpecialArticleToContractHead`, Zeilen 319-327 |
| StRS-062 | SyRS-033 | SwRS-088 | `src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs`, `CreateSpecialArticleToContractFromMspEvaluation`, Zeile 129 |
| StRS-062 | SyRS-033 | SwRS-197 | `src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleImportBL.cs` |
| StRS-062 | SyRS-173 | SwRS-004 | `src/backend/Centron.BL/Sales/Support/HelpdeskCloseBL.cs`, `ObjectMapper.Map<AccountAddressContact, AccountAddressContactDTO>(contact.Data)` |
| StRS-062 | SyRS-173 | SwRS-173 | `src/webservice/Centron.Controllers/Controllers/v1/` mit den genannten 15 Bereichsverzeichnissen |
| StRS-062 | SyRS-173 | SwRS-175 | `src/webservice/Centron.Controllers/Controllers/v1/Integrations/` und `Controllers/v1/DataExchange/` mit den elf genannten Controllern |
| StRS-062 | SyRS-173 | SwRS-194 | `src/backend/Centron.BL/CustomerArea/BusinessLineBL.cs`, `InterestBL.cs`, `ProductBL.cs` |
| StRS-062 | SyRS-173 | SwRS-212 | `src/backend/Centron.BL/Mobile/MobileBL.cs` und `src/backend/Centron.Entities/Entities/Mobile/` |
| StRS-062 | SyRS-175 | SwRS-175 | `src/webservice/Centron.Controllers/Controllers/v1/Integrations/` und `Controllers/v1/DataExchange/` mit den elf genannten Controllern |
| StRS-062 | SyRS-175 | SwRS-196 | `src/backend/Centron.BL/ExternalHelpdesk/ExternalHelpdeskConfigurationBL.cs` |
| StRS-062 | SyRS-175 | SwRS-201 | `Centron.Api.docuFORM/Centron.Api.docuFORM.csproj` |
| StRS-062 | SyRS-175 | SwRS-209 | `SSMS_DB_SCHEMA.sql`, Tabellen `SocialMediaStream`, `SocialMediaStreamAccount`, `SocialMediaAction`, `SocialMediaComment`, `SocialMediaLike` |
| StRS-062 | SyRS-175 | SwRS-214 | `src/backend/Centron.BL/RiverDivo/RiverConnectionBL.cs`, `src/backend/Centron.BL/CPra/CPraConnectorBL.cs`, `src/backend/Centron.BL/TradePool/TradePoolBL.cs` |
| StRS-062 | SyRS-179 | SwRS-179 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, Region „Automatisierung", zwei getrennte Registrierungen mit `SHOW_EXPECTEDEVENTS` und `SHOW_EXPECTEDEVENTSREPORTING` |
| — | SyRS-005 | SwRS-005 | `SSMS_DB_SCHEMA.sql`, Tabellen `AngKopf`, `AufKopf`, `LiefKopf`, `RechKopf`, `VertragKopf`, `GutKopf`, `AbholKopf` mit ihren Positionstabellen |
| — | SyRS-008 | SwRS-029 | `src/centron/Centron.WPF.UI/Modules/ModuleRegistration.cs`, `new SwitzerlandSettingsController()` in `GetSettingsWithoutModule()` |
| — | SyRS-011 | SwRS-009 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt` mit `return this.Session.WithTransaction(() => { … })` |
| — | SyRS-011 | SwRS-011 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Aufrufkette Zeilen 3634-3700 |
| — | SyRS-011 | SwRS-015 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `ForwardReceipt<TReceipt, TReceiptItem>(AppUser, ForwardReceiptData, IList<ReceiptToForward>, IList<int>, InsertReceiptTakeoverOptions, bool, bool)`, Zeile 1548 |
| — | SyRS-011 | SwRS-027 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „Validate Unconverted Article Warning", Zeile 2509 |
| — | SyRS-012 | SwRS-012 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Methodensignaturen ab Zeile 4790 mit `Guid? concurrencyControlGuid` |
| — | SyRS-012 | SwRS-064 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `UpdateReceiptQuantityPicked`, Zeile 5031 |
| — | SyRS-013 | SwRS-013 | `src/backend/Centron.BL/Sales/Receipts/Invoices/InvoiceSpecificLogic.cs`, Feld `private readonly AssetLockBL<InvoiceLock> _lockBL;` |
| — | SyRS-015 | SwRS-015 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `ForwardReceipt<TReceipt, TReceiptItem>(AppUser, ForwardReceiptData, IList<ReceiptToForward>, IList<int>, InsertReceiptTakeoverOptions, bool, bool)`, Zeile 1548 |
| — | SyRS-015 | SwRS-024 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `GetReceiptProgression`, Zeile 4767, mit Parameter `limit` |
| — | SyRS-015 | SwRS-028 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `ForwardReceipt` mit `IList<int> receiptProjectLayoutItemI3DsToForward` und `CreateFullReportForReceipt` mit `IList<ReceiptProjectLayoutItem> layoutItems` |
| — | SyRS-016 | SwRS-016 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Block `if (isTemplate) { data.IgnoreCallbacks = true; … }` mit dem Kommentar „We automatically ignore all callbacks when saving a receipt-template" |
| — | SyRS-021 | SwRS-021 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Aufruf mit `previousReceiptVersion` als Referenz |
| — | SyRS-022 | SwRS-001 | `src/backend/Centron.BL/BLSession.cs`, `BaseBL.cs`, `DBBaseBL.cs` |
| — | SyRS-022 | SwRS-010 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt(IReceiptBase receipt, …)`, Zeilen 3519-3521 mit `MakeGenericMethod(...).Invoke(...)` |
| — | SyRS-022 | SwRS-022 | `src/backend/Centron.BL/Sales/Receipts/Invoices/InvoiceSpecificLogic.cs`, `TargetReceiptKind => CentronObjectKindNumeric.InvoiceClass` |
| — | SyRS-022 | SwRS-070 | `src/backend/Centron.BL/Sales/Receipts/SupplierOrders/`, `SupplierDeliveryLists/`, `SupplierInvoices/`, `SupplierCreditVouchers/` |
| — | SyRS-031 | SwRS-031 | `src/backend/Centron.BL/Warehousing/ArticleBL.cs`, `GetFlatrateBalanceArticle` und `GetContractBalanceArticle` als getrennte Methoden |
| — | SyRS-041 | SwRS-041 | `src/backend/Centron.BL/Sales/Support/HelpdeskTimeRecordingBL.cs`, `GetStopwatchNotificationsForEmployee` (Zeile 506) und `DeleteStopwatchNotifications` (Zeile 518) |
| — | SyRS-052 | SwRS-052 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `CheckTextFieldLengths`, Zeilen 333-348, mit dem Kommentar `// nvarchar:2000 > string:1000` |
| — | SyRS-052 | SwRS-059 | `src/nexus/CentronNexus/ServiceBoard/CachedTicketList/Components/` mit `FilterEditorGroup.razor`, `ConditionalFormattingEditor.razor`, `SummaryEditor.razor`, `KanbanBucketSelection.razor` |
| — | SyRS-053 | SwRS-053 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `AddShortDescriptionPrefix` mit `new ReplacementBL().ReplaceVariables(prefix, variablesAndValues, "@@")` |
| — | SyRS-053 | SwRS-203 | `src/backend/Centron.BL/Sales/Support/HelpdeskBL.cs`, `AddShortDescriptionPrefix` mit `new AppSettingsBL(this.Session).GetSettings(ApplicationSettingID.IsHelpdeskShortDescriptionPrefixActivated, ApplicationSettingID.HelpdeskShortDescriptionPrefix)` und den typisierten Zugriffen mit Vorgabewert |
| — | SyRS-061 | SwRS-061 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, `SaveReceipt`, Aufruf `this._receiptBarcodeBL.CheckIfAllNonActiveBarcodesAreStillInTheReceipt(receipt, previousReceiptVersion)` |
| — | SyRS-064 | SwRS-027 | `src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs`, Region „Validate Unconverted Article Warning", Zeile 2509 |
| — | SyRS-064 | SwRS-031 | `src/backend/Centron.BL/Warehousing/ArticleBL.cs`, `GetFlatrateBalanceArticle` und `GetContractBalanceArticle` als getrennte Methoden |
| — | SyRS-064 | SwRS-065 | `src/backend/Centron.BL/Warehousing/ArticleBL.cs`, Methoden `GetFreightArticle` (166), `GetCustomerDiscountArticle` (190), `GetArticleI3DForExternalArticles` (207), `GetArticleI3DForNewArticles` (215), `GetVoucherArticleList` (235) |
| — | SyRS-064 | SwRS-200 | `src/backend/Centron.BL/Warehousing/ArticleBL.cs`, `GetVoucherArticleList`, Zeile 235 |
| — | SyRS-074 | SwRS-074 | `src/apis/Centron.APIs.ITscopeDataAccess/Data/ITscopeApiKeyQuota.cs` |
| — | SyRS-101 | — | `src/backend/Centron.BL/Administration/Logins/TicketBL.cs`, `RefreshTicketExpireDate`, Bedingung `< 5` |
| — | SyRS-128 | SwRS-128 | `src/backend/Centron.BL/Notifications/CentronNotificationsBL.cs` und `src/backend/Centron.BL/NexusNotifications/NexusNotificationsBL.cs` |
| — | SyRS-128 | SwRS-205 | `src/backend/Centron.BL/Chats/ChatBL.cs` und `src/backend/Centron.Entities/Entities/Chats/` |
| — | SyRS-164 | SwRS-164 | `tests/backend/`, `tests/shared/`, `tests/apis/` gegenüber `src/backend/`, `src/shared/`, `src/apis/` |
| — | — | SwRS-211 | `src/shared/Centron.Core/`, `src/shared/Centron.Controls/`, `src/shared/Centron.Controls.Preview/` |
**Zeilen gesamt: 319**
@@ -0,0 +1,184 @@
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Iteration 02
## Lauf
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
- **Iteration:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
vorhandene Iterationsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
- **Startzeit:** 2026-08-26T22:58:15.5203844+02:00
- **Endzeit:** 2026-08-27T00:24:02.3040325+02:00
- **Dauer gesamt:** 1:25:46 (`duration_ms` 1:25:45; API: 1:21:50)
— **im Parallelbetrieb erhoben, nicht für Laufzeitvergleiche verwendbar**
- **Root-Verzeichnis:** `c:\DEV\MasterArbeit\QuellCode\CentronERP` (24.662 versionierte Dateien)
- **Codebasis-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748` (dirty: nein)
- **Snapshot-Zustand:** bereinigt von KI-Konfigurationen: ja (Prüfmuster ohne Treffer);
die Codebasis ist seit Commit `f045b99a` kein eigenes Repository mehr, sondern Teil des
Arbeitsrepos – der Vorher/Nachher-Vergleich läuft deshalb pfadskopiert
- **Snapshot-Zusatzartefakte:** keine – der Snapshot entspricht dem Commit-Stand
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
## Werkzeugkonfiguration
- **Skill-Version:** 7.0.0
- **Claude-Code-Version:** 2.1.246
- **CLI-Pfad:** `C:\Users\ChristophSchwoerer\.vscode\extensions\anthropic.claude-code-2.1.246-win32-x64\resources\native-binary\claude.exe`
- **Modell (angefordert):** `claude-opus-5`
- **Modelle (tatsächlich eingesetzt):** `claude-opus-5` 38.137.560 Tokens (99.98 %), `claude-haiku-4-5-20251001` 6.965 Tokens (0.02 %)
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
- **Effort:** `high` (per `--effort high` gesetzt)
- **Laufverzeichnis-ID:** `v7.0.0-2269`
- **Ablage:** `Iteration 3/claude-opus-5/solo/high/`
- **Parallele Läufe:** nein – die Zeitangaben sind für Laufzeitvergleiche verwendbar
- **Agentenmodus:** `solo` (V1)
- **Kontextfenster:** 1.000.000 Tokens; `maxOutputTokens` 64.000
- **Sampling-Parameter:** nicht steuerbar über die CLI, nicht erfasst
- **Nur bei lokalem Modellbetrieb:** entfällt (Cloud-Inferenz, `provider: firstParty`)
- **Permission-Mode:** `acceptEdits`
- **Toolfreigabe:** `--allowedTools "Bash" "PowerShell"` /
`--disallowedTools` 33er-Denylist (schreibende und bauende Kommandos) **zuzüglich** `Task`, `Agent`, `Workflow` aus dem Modus `solo`
- **Isolationsmechanismus:** `--safe-mode`, `--strict-mcp-config`
- **MCP-Server / Agentendateien:** keine – aus dem Snapshot entfernt, zusätzlich `--safe-mode`
- **Subagenten:** keine (`spawned` = 0, `by_type` leer)
- **Verschachtelung:** `spawned` = 0, davon `spawned_by_subagents` = 0, `max_depth` = 0. Keine tieferen Ebenen, `_meta\subagenten.md` entfällt.
## Validierungsstichprobe
- **Größe:** noch nicht festgelegt
- **Ziehungsverfahren:** noch nicht festgelegt
- **Validatoren:** noch nicht festgelegt
- **Stand:** noch nicht gezogen
## Verbrauch
### Hauptagent (`usage`)
| Messgröße | Wert |
|---|---:|
| Input-Tokens | 256 |
| Output-Tokens | 468.007 (davon 20.913 Thinking-Tokens) |
| Cache-Write-Tokens | 596.413 |
| Cache-Read-Tokens | 37.072.884 |
| Agent-Turns | 165 |
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
| Messgröße | `claude-opus-5` | `claude-haiku-4-5-20251001` | Summe |
|---|---:|---:|---:|
| Input-Tokens | 256 | 6.943 | 7.199 |
| Output-Tokens | 468.007 | 22 | 468.029 |
| Cache-Write-Tokens | 596.413 | 0 | 596.413 |
| Cache-Read-Tokens | 37.072.884 | 0 | 37.072.884 |
| **Tokens gesamt** | **38.137.560** | **6.965** | **38.144.525** |
**Tokens gesamt: 38.144.525** — Input + Output + Cache-Write + Cache-Read über alle Modelle.
Das ist die **berichtete Aufwandsgröße** der Versuchsreihe. `total_cost_usd` bleibt unberührt in
`RawResult.json` erhalten, wird aber nicht ins Protokoll übernommen: Token sind modell- und
preisunabhängig und bleiben damit über Preisänderungen und Modellwechsel hinweg vergleichbar.
Da im Modus `solo` keine Subagenten laufen, sind `usage` und `modelUsage` für das Hauptmodell
deckungsgleich; die Differenz zur Summe stammt allein aus den Haiku-Hilfsaufrufen.
## 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 |
|---|---:|---:|
| StRS | 62 | 17,1 % |
| SyRS | 132 | 36,4 % |
| SwRS | 169 | 46,6 % |
| **Gesamt** | **363** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 147 | 40,5 % |
| Daten | 87 | 24,0 % |
| Sicherheit | 55 | 15,2 % |
| nicht-funktional | 46 | 12,7 % |
| Schnittstelle | 28 | 7,7 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 740 |
| davon `PRIMÄR` | 490 (66,2 %) |
| davon `SEKUNDÄR` | 187 (25,3 %) |
| davon `KONTEXT` | 63 (8,5 %) |
| Belege je Anforderung (Median) | 2 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 362 (99,7 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 337 | 92,8 % |
| workaround | 12 | 3,3 % |
| sonderfall | 1 | 0,3 % |
| veraltet | 13 | 3,6 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 358 | 98,6 % |
| als `HYPOTHESE` gekennzeichnet | 5 | 1,4 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 67 | 18,5 % |
| mit ISO-25010-Qualitätsmerkmal | 46 | 12,7 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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** (106 risikorelevante Anforderungen, alle gedeckt) |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 363 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 363 von 363 mit Tracelinks (100,0 %) |
## Ergebnis
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
- **Session-ID:** `0ec4aa93-c1b8-4ad1-ae63-2ebcdc31cbf4`
- **Permission-Denials:** 8 (5 × `Bash`, 2 × `PowerShell`, 1 × `Read`) – **keines auf `Task`/`Agent`/`Workflow`**. Der Agent hat zu keinem Zeitpunkt zu delegieren versucht; die Modus-Sperre wurde nie ausgelöst.
- **Kontrolle Agentenmodus:** `subagent_stats.spawned` = 0 – Bedingung `solo` eingehalten
- **Subagenten-Prompts:** entfällt (Modus `solo`)
- **Erzeugte Dateien:** 7 Dateien in `Ergebnisse\`:
| Datei | Größe |
|---|---:|
| `Analysebericht.md` | 75.086 B |
| `Glossar.md` | 14.154 B |
| `Hypothesen.md` | 6.393 B |
| `StRS.md` | 104.009 B |
| `SwRS.md` | 251.643 B |
| `SyRS.md` | 206.150 B |
| `Traceability.md` | 54.332 B |
- **Root unverändert:** ja (zeilenendennormalisiert verglichen).
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
## Anmerkungen/Auffälligkeiten
**1. Neue Zelle: `claude-opus-5` / `solo` / `high`.** Erster gültiger Lauf dieser Kombination.
Der vorausgegangene Versuch `195958_v7.0.0-e7e6` scheiterte am Session-Kontingent; dieser Lauf
wurde **seriell** gefahren, ohne jeden Parallelbetrieb.
**2. Er relativiert den Effort-Befund vom Vortag.** Die verdoppelte Belegdichte – Median 2,0
statt 1,0 – war den drei `max`-Läufen zugeschrieben worden, weil alle 44 `high`-Läufe zuvor bei
Median 1,0 lagen. Dieser Lauf erreicht Median **2,0 auf `high`**. Der Unterschied liegt damit
nicht am Effort, sondern am **Modell**: Die 44 Läufe mit Median 1,0 liefen sämtlich auf Sonnet,
die `max`-Läufe auf Opus. Opus liefert die höhere Belegdichte auch ohne `max`; `max` hebt sie
bei Opus weiter auf 3,0. Der Effort bleibt für den **Verbrauch** wirksam: 38,1 Mio. Tokens auf
`high` gegenüber 67,5 bis 116,2 Mio. auf `max`.
**3. Zweithöchste Primärbelegquote der Reihe: 99,7 %** (362 von 363 Anforderungen). Nur `37c5`
war mit 100 % besser – ebenfalls Opus, dort auf `max`.
**4. Ausgewogene Ebenenverteilung** (62 StRS / 132 SyRS / 169 SwRS) und 740 Belege auf 363
Anforderungen. `spawned` = 0, Modellkontrolle bestanden.
**5. Seriell gemessen – die Zeitangabe ist verwertbar.** Als erst zweiter Lauf der gesamten
Reihe (nach `d6f9`) lief dieser ohne Parallelbetrieb und ohne Kontingentwartezeit.
@@ -0,0 +1,65 @@
## 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 |
|---|---:|---:|
| StRS | 62 | 17,1 % |
| SyRS | 132 | 36,4 % |
| SwRS | 169 | 46,6 % |
| **Gesamt** | **363** | 100 % |
### Anforderungstypen
| Typ | Anzahl | Anteil |
|---|---:|---:|
| funktional | 147 | 40,5 % |
| Daten | 87 | 24,0 % |
| Sicherheit | 55 | 15,2 % |
| nicht-funktional | 46 | 12,7 % |
| Schnittstelle | 28 | 7,7 % |
### Belegqualität
| Messgröße | Wert |
|---|---:|
| Belege gesamt | 740 |
| davon `PRIMÄR` | 490 (66,2 %) |
| davon `SEKUNDÄR` | 187 (25,3 %) |
| davon `KONTEXT` | 63 (8,5 %) |
| Belege je Anforderung (Median) | 2 |
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 362 (99,7 %) |
### Übernahmewürdigkeit
| Einstufung | Anzahl | Anteil |
|---|---:|---:|
| übernehmen | 337 | 92,8 % |
| workaround | 12 | 3,3 % |
| sonderfall | 1 | 0,3 % |
| veraltet | 13 | 3,6 % |
### Status
| Kategorie | Anzahl | Anteil |
|---|---:|---:|
| belegt | 358 | 98,6 % |
| als `HYPOTHESE` gekennzeichnet | 5 | 1,4 % |
| als Workaround vermerkt | 0 | 0,0 % |
| Konsolidierungskandidaten | 67 | 18,5 % |
| mit ISO-25010-Qualitätsmerkmal | 46 | 12,7 % |
### Regelkonformität (Prüfung gegen die Vorgaben des Prompts)
| Vorgabe | Ergebnis |
|---|---|
| **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** (106 risikorelevante Anforderungen, alle gedeckt) |
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 363 Anforderungen eingestuft) |
| **Traceability** – Verknüpfung zwischen den Ebenen | 363 von 363 mit Tracelinks (100,0 %) |
@@ -0,0 +1,177 @@
# Versuch 01 - Baseline (Prompt-only) - Iteration 02
## Metadaten
- **Versuch:** V1 Baseline (Prompt-only)
- **Iteration:** 02 (erste Überarbeitung nach Auswertung von Iteration 01)
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Auswertung der 24 Läufe von Tag 1 über 3.287 erzeugte Anforderungen. Jede Änderung ist an einen gemessenen Befund gekoppelt:
| Änderung | Auslösender Befund |
|---|---|
| Modulinventar als Pflicht-Vorstufe, Mindestabdeckung je Modul, Vertiefung erst danach | Anforderungszahl schwankte je Lauf zwischen 42 und 325 (Faktor 5,9); 55 bis 60 von rund 85 Modulen blieben unanalysiert; die Modultabellen der Analyseberichte reichten von 0 bis 51 Zeilen |
| Hypothesenpflicht kalibriert, `Hypothesen.md` deckungsgleich mit den Inline-Markierungen | Zwei Läufe meldeten null Hypothesen bei 71 bzw. 148 Anforderungen; der Anteil schwankte zwischen 0 % und 26,2 %; mehrfach wichen Sammeldatei und Inline-Markierungen voneinander ab |
| Primärbeleg muss die durchsetzende Stelle benennen | 45,9 % aller Anforderungen trugen genau einen Beleg; in einem Lauf waren 5 von 31 risikorelevanten Anforderungen weder mit `PRIMÄR` noch als `[HYPOTHESE]` gedeckt |
| Belegpflicht verschärft: ohne Beleg keine Anforderung | Eine Anforderung wurde ohne jeden Beleg geschrieben |
| Konsolidierungsbegriff an einem Beispiel kalibriert | Anteil der Konsolidierungskandidaten schwankte je Lauf zwischen 2,4 % und 35,2 % |
| Eigenes Feld `Qualitätsmerkmal` für die ISO-25010-Zuordnung | Die Zuordnung war gefordert, hatte aber keinen Ablageort: nur 33 von 313 nicht-funktionalen Anforderungen führten sie als eigene Angabe |
| Risikoanforderungen im Konsistenzcheck auflisten | Verstöße gegen die risikobasierte Priorisierung fielen erst in der nachgelagerten Auswertung auf, nicht im Lauf selbst |
Unverändert bleiben Prüfidee, Tracelinks, Belegklassifikation und das Blockformat: Prüfidee und Tracelinks waren in **allen** 3.287 Anforderungen gesetzt, 78,6 % der Belege waren `PRIMÄR`.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
---
### Werkzeugkontext (vom Versuchsaufbau vorgegeben)
Für diesen Lauf stehen zur Verfügung: Lesen und Suchen von Dateien sowie das Ausführen von
Kommandozeilenbefehlen im Arbeitsverzeichnis.
Nicht verfügbar sind: Subagenten, spezialisierte Agentenrollen, externe Werkzeugserver.
Triff keine Annahmen über weitere Werkzeuge und versuche nicht, nicht verfügbare
Werkzeuge zu ersetzen.
### Ausgabeverzeichnis (überschreibt anderslautende Pfadangaben oben)
Schreibe ALLE zu erzeugenden Ergebnisdateien in das Verzeichnis
`c:\DEV\MasterArbeit\Versuche\Versuch_01\Iteration 3\claude-opus-5\solo\high\02_Lauf_2026-08-26_225807_v7.0.0-2269\Ergebnisse\`.
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
@@ -0,0 +1 @@
2026-08-27T00:24:02.3040325+02:00
+34
View File
@@ -0,0 +1,34 @@
{
"modulinventar": {
"description": "Schritt 0: erstellt das vollständige Modulinventar als Bezugsgröße für die Abdeckung, mit Buchführung über zugeordnete und nicht zugeordnete Quelldateien. Erzeugt KEINE Anforderungen.",
"prompt": "Du erstellst das Modulinventar für ein Reverse-Requirements-Engineering-Vorhaben an einer Legacy-ERP-Suite. Du formulierst KEINE Anforderungen. Deine einzige Aufgabe ist eine vollständige, belegte und nachrechenbare Bestandsaufnahme.\n\n## Vorgehen\n\n1. Erschließe die Struktur aus den Projektdateien, nicht aus Vermutungen: Solution- und Projektdateien, Verzeichnisbaum, Modul-Registrierungen im Code, Rechtekonstanten, Tabellen des Datenbankschemas.\n2. Erfasse JEDES fachliche Modul und JEDE technische Querschnittskomponente. Ein Modul, das hier fehlt, existiert für die gesamte weitere Analyse nicht — das Inventar ist die Bezugsgröße für die Mindestabdeckung.\n3. Nimm das Datenbankschema ausdrücklich mit auf: Ein Schema-Dump im Arbeitsverzeichnis ist eine erstrangige Strukturquelle. Ordne die Tabellengruppen den fachlichen Modulen zu, soweit die Namensgebung das trägt.\n\n## Was du je Eintrag lieferst\n\n`ID` (M001, M002, … fortlaufend, stabil sortiert) | `Modul` | `Art` (fachlich | technisch) | `Pfad` | `Dateien` (Anzahl Quelldateien) | `Aufgabe` (ein Satz) | `Belegquelle` (woraus du die Aufgabe abgeleitet hast: Klassenname, UI-String, Kommentar, Tabellenname)\n\n## Harte Regeln\n\n- **Der Aufgabensatz muss belegt sein.** Leite ihn aus dem ab, was du tatsächlich gelesen hast. Ein Ordnername ist kein Beleg. Kannst du die Aufgabe nicht bestimmen, schreibe `Aufgabe unbestimmt` plus Begründung — aber lasse das Modul NICHT weg.\n- **Kein Zuschnitt nach Bequemlichkeit.** Weder alles in wenige Großmodule zusammenfassen noch jede Datei zu einem Modul erklären. Richte dich nach der fachlichen Gliederung, die die Codebasis selbst vornimmt (Modulregistrierung, Menüstruktur, Namensräume). Beschreibe deinen Zuschnitt in zwei Sätzen, damit er nachvollziehbar ist.\n\n## Abschlussbuchführung — Pflicht\n\nNenne am Ende:\n- Anzahl Module gesamt, davon fachlich / technisch\n- Summe der dem Inventar zugeordneten Quelldateien\n- Gesamtzahl der Quelldateien im Arbeitsverzeichnis\n- Die Differenz, und welche Verzeichnisse sie ausmacht\n\nEine Differenz ist zulässig (Tests, generierter Code, Ressourcen), aber sie muss **benannt** sein. Eine Buchführung, die nicht aufgeht und das nicht erklärt, ist unbrauchbar.\n\n## Rückgabe\n\nDie Inventartabelle, die zwei Sätze zum Zuschnitt und die Abschlussbuchführung. Keine Einleitung, keine Zusammenfassung, keine Empfehlungen."
},
"faktenermittler": {
"description": "Erhebt für einen zugewiesenen Modulausschnitt belegte technische Fakten samt der durchsetzenden Codestelle, mit Abdeckungsbuchführung je Modul. Formuliert KEINE Anforderungen.",
"prompt": "Du erhebst Fakten aus einer Legacy-ERP-Codebasis. Du formulierst KEINE Anforderungen und KEINE Interpretationen — die schreibt der Auftraggeber selbst aus deinen Fakten. Deine Fakten sind sein einziges Material: Was du nicht lieferst, wird nicht spezifiziert; was du falsch lieferst, wird zur falschen Anforderung.\n\n## Was ein Fakt ist\n\n`Fundstelle` — Pfad, Klasse, Methode, wenn bestimmbar Zeilenbereich.\n`Beobachtung` — was der Code tatsächlich tut: Statusübergang, Validierungsregel, Berechnungsformel, Berechtigungsprüfung, Constraint, Default. Die tragende Bedingung wörtlich oder eng paraphrasiert.\n`Einstufung` — nach der Rubrik unten.\n`Modul` — die Inventar-ID, zu der der Fakt gehört.\n\n## Belegrubrik — daran entscheidet sich die Verwertbarkeit\n\n**PRIMÄR** — die genannte Stelle **setzt die Regel durch**. Man kann hingehen und die Bedingung lesen.\n> `AppRightsBL.cs, GetRightsFromCurrentUser(AppUser)` — iteriert `user.Groups` und sammelt `group.Rights`; Rechte hängen ausschließlich an Gruppen, nie direkt am Benutzer.\n\n**SEKUNDÄR** — die Stelle ruft die Regel auf, konfiguriert oder zeigt sie an, setzt sie aber nicht durch.\n> `AppUserGroupBL.cs` — verwaltet die Gruppenzuordnung, auf der die Rechteprüfung aufbaut.\n\n**KONTEXT** — Umfeld, das die Aussage stützt, ohne sie zu tragen: UI-Beschriftungen, Konfigurationswerte, Kommentare.\n\n## Anti-Muster — in Messungen nachweislich gescheitert\n\n- **„Diese Datei betrifft die Fakturierung.“** Ein Dateiverweis ist kein Fakt. Gefordert ist die Stelle **mit Bedingung**, etwa: `InvoiceService.cs:212, FinalizeInvoice() — wirft InvalidOperationException, wenn invoice.Status == InvoiceStatus.Paid`.\n- **„Ich öffne ein bis drei repräsentative Dateien.“** Stichproben liefern keine Primärbelege: Die durchsetzende Stelle liegt fast nie in der Datei, die repräsentativ aussieht. Nutze Suchwerkzeuge, um die tragenden Stellen zu finden, statt zu raten, welche Datei sie enthält.\n- **Aufwärtsrunden der Einstufung.** Was du nicht als durchsetzende Stelle gelesen hast, ist nicht `PRIMÄR`. Eine falsch hochgestufte Einstufung ist schlimmer als eine ehrliche `SEKUNDÄR`.\n\n## Pflichtquellen\n\n- **Das Datenbankschema.** Liegt ein SQL-Schema-Dump im Arbeitsverzeichnis, ist er für deinen Ausschnitt auszuwerten: Constraints, Fremdschlüssel, Defaults und `NOT NULL` sind durchgesetzte Regeln und damit erstrangige `PRIMÄR`-Belege. In Messungen haben zwei von fünf Läufen den Dump übersehen und dadurch Belege verloren.\n- **Risikobereiche zuerst und tiefer:** Sicherheitsregeln, Abrechnungs- und Fakturierungslogik, Berechtigungsprüfungen.\n\n## Was du ausdrücklich melden musst\n\n- **Nicht gefundene Durchsetzung.** Existiert eine Regel offensichtlich, kannst du die durchsetzende Stelle aber nicht lokalisieren, sage das mit Begründung. Diese Meldungen werden zu ausgewiesenen Hypothesen. Eine verschwiegene Lücke wird dagegen zu einer Anforderung, die niemand mehr prüfen kann.\n- **Widersprüche.** Zwei Stellen, die dieselbe Regel unterschiedlich durchsetzen, sind ein eigener Befund — nicht stillschweigend zugunsten einer Variante auflösen.\n- **Nicht implementiertes.** Methoden, die nur `throw new NotImplementedException(...)` enthalten, obwohl Aufrufer und Rechteprüfung existieren, sind ein Befund von hohem Wert.\n\n## Abdeckungsbuchführung — Pflicht\n\nSchließe mit einer Tabelle: je zugewiesenem Modul die Anzahl der gelieferten Fakten, davon `PRIMÄR`, und die Einstufung `tief | mittel | flach | nicht erschlossen` mit einem Satz Begründung. Module ohne einen einzigen Fakt sind namentlich zu nennen.\n\n## Rückgabe\n\nDie Fakten, nach Modul gegliedert, dann die Abdeckungsbuchführung. Prüfe vor dem Absenden: Trägt jeder als `PRIMÄR` eingestufte Fakt eine Bedingung, die man an der genannten Stelle nachlesen kann? Wenn nicht, stufe ihn herunter."
},
"strs-autor": {
"description": "Formuliert ausschließlich Stakeholder-Anforderungen (StRS) im vorgegebenen Blockformat aus gelieferten Fakten.",
"prompt": "Du formulierst **ausschließlich Stakeholder-Anforderungen (StRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene, und wie du sie prüfst\n\nStRS beschreibt die **fachliche Sicht**: Akteure, Geschäftsziele, Geschäftsregeln, fachliche Ergebnisse. Nicht, wie das System das technisch löst.\n\n**Grenztest — wende ihn auf jede `Aussage` an, bevor du sie stehen lässt:** Nennt der Satz eine Klasse, eine Methode, eine Tabelle, ein Protokoll oder eine Schnittstelle, gehört er nicht auf diese Ebene. Formuliere ihn fachlich um oder verwirf ihn und setze stattdessen einen Tracelink. Der Fakt darf und soll technisch sein — die `Aussage` nicht.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg.** Fundstelle und Einstufung werden aus den gelieferten Fakten **unverändert** übernommen. Du stufst nichts hoch und erfindest nichts. Findest du keinen Fakt für einen Sachverhalt, schreibst du keine Anforderung — du meldest die Lücke.\n- **`Fakt` und `Aussage` sind zwei verschiedene Dinge.** `Fakt` ist die belegte Beobachtung, `Aussage` die fachliche Soll-Formulierung („Das System soll …“). Wer beides vermischt, erzeugt eine Anforderung, deren Belegbarkeit nicht mehr prüfbar ist.\n- **Risikorelevante Anforderungen** (Sicherheit, Abrechnung, Berechtigungen) brauchen einen `PRIMÄR`-Beleg **oder** `[HYPOTHESE]` in `Status`. Einen dritten Weg gibt es nicht. Dies ist die Regel, die in Messungen am häufigsten verfehlt wurde — prüfe sie bei jeder einzelnen Anforderung.\n- **Belege mehrfach, wo die Faktenlage es hergibt.** Ein einzelner Beleg ist zulässig, aber kein Ziel; Anforderungen mit mehreren unabhängigen Belegen sind belastbarer.\n- **`Prüfidee` ist Pflicht** und muss ein prüfbares Kriterium nennen. „Wird getestet“ ist keine Prüfidee. „Benutzer A ist nur Gruppe X zugeordnet, X besitzt Recht R nicht → Aufruf einer mit R geschützten Aktion muss verweigert werden“ ist eine.\n- **Nicht-funktionale Anforderungen** tragen das ISO-25010-Merkmal im Feld `Qualitätsmerkmal`, niemals im Feld `Typ`.\n\n## Selbstprüfung vor dem Absenden\n\nGeh deine Blöcke durch und beantworte für dich: Wie viele Anforderungen hast du geschrieben? Wie viele davon sind risikorelevant, und tragen die **alle** entweder `PRIMÄR` oder `[HYPOTHESE]`? Gibt es doppelte IDs? Nenne diese drei Zahlen am Ende deiner Rückgabe.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die drei Zahlen der Selbstprüfung und eine Liste der Sachverhalte, für die dir Fakten fehlten."
},
"syrs-autor": {
"description": "Formuliert ausschließlich System-Anforderungen (SyRS) im vorgegebenen Blockformat aus gelieferten Fakten.",
"prompt": "Du formulierst **ausschließlich System-Anforderungen (SyRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene, und wie du sie prüfst\n\nSyRS beschreibt das **beobachtbare Systemverhalten an den Systemgrenzen**: Schnittstellen, Statusmaschinen, Validierungen, Performance- und Sicherheitsverhalten.\n\n**Grenztest nach oben:** Beschreibt deine `Aussage` ein Geschäftsziel, ohne Systemverhalten zu nennen, gehört sie auf die StRS-Ebene.\n**Grenztest nach unten:** Beschreibt sie internen Aufbau — Klassenstruktur, Persistenzweg, Algorithmus —, gehört sie auf die SwRS-Ebene. Verwende Tracelinks statt die Grenze zu überschreiten.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg;** Fundstelle und Einstufung unverändert übernehmen, nichts hochstufen.\n- **`Fakt` und `Aussage` sauber trennen.**\n- **Risikorelevante Anforderungen** (Sicherheit, Abrechnung, Berechtigungen) brauchen `PRIMÄR` **oder** `[HYPOTHESE]`. Diese Regel wurde in Messungen am häufigsten verfehlt — prüfe sie einzeln.\n- **Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung** in `Tracelinks`. Existiert keine, benenne die fachliche Lücke ausdrücklich, statt das Feld leer zu lassen.\n- **Nicht-funktionale Anforderungen** tragen das ISO-25010-Merkmal im Feld `Qualitätsmerkmal`, nicht im `Typ`. Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.\n- **`Prüfidee` ist Pflicht** und nennt ein prüfbares Kriterium.\n\n## Selbstprüfung vor dem Absenden\n\nAnzahl geschriebener Anforderungen; Anzahl risikorelevanter und ob **alle** gedeckt sind; Anzahl ohne StRS-Tracelink. Nenne die drei Zahlen am Ende.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die Selbstprüfung und die Liste fehlender Fakten."
},
"swrs-autor": {
"description": "Formuliert ausschließlich Software-Anforderungen (SwRS) im vorgegebenen Blockformat aus gelieferten Fakten, einschließlich Konsolidierungsprüfung.",
"prompt": "Du formulierst **ausschließlich Software-Anforderungen (SwRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene\n\nSwRS beschreibt die **softwareinterne Sicht**: Komponenten, Datenmodelle, Persistenzregeln, interne Algorithmen und Berechnungsvorschriften, softwareinterne Constraints. Was an der Systemgrenze beobachtbar ist, gehört auf die SyRS-Ebene.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg;** nichts hochstufen, nichts erfinden.\n- **`Fakt` und `Aussage` sauber trennen.**\n- **Risikorelevante Anforderungen** brauchen `PRIMÄR` **oder** `[HYPOTHESE]`. Einzeln prüfen.\n- **Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung** in `Tracelinks`.\n- **Datenbank-Constraints sind erstrangige Belege.** Fremdschlüssel, `NOT NULL`, Defaults und Check-Constraints aus dem Schema sind durchgesetzte Regeln und als `PRIMÄR` einzustufen.\n\n## Konsolidierungsprüfung — deine besondere Zuständigkeit\n\nDie Codebasis enthält fachliche Redundanz: Dieselbe Funktion kann in getrennten Modulen unterschiedlich implementiert sein. Prüfe bei jeder Anforderung, ob eine andere denselben fachlichen Gegenstand abbildet, und trage den Fall in `Konsolidierung` ein.\n\n**Kalibrierung.** Gemeint sind *fachlich gleichartige Konzepte in getrennten Implementierungen*. Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter“ geführt, sonstige Hardware getrennt davon als „Assets“ — zwei Datenhaltungen für denselben fachlichen Gegenstand, im Zielsystem zu einem Asset-Konzept zusammenzuführen.\n\n**Kein Konsolidierungsfall** sind zwei Anforderungen, die denselben Sachverhalt aus Sicht verschiedener Ebenen beschreiben — dafür sind die Tracelinks da. In Messungen schwankte der Anteil der Konsolidierungskandidaten zwischen 2,4 % und 35,2 %; die Spanne entstand fast vollständig dadurch, dass Ebenendopplungen fälschlich als Konsolidierungsfall gezählt wurden.\n\n## Selbstprüfung vor dem Absenden\n\nAnzahl Anforderungen; Anzahl risikorelevanter und ob alle gedeckt; Anzahl Konsolidierungskandidaten und für zwei davon je ein Satz, warum es sich um getrennte Implementierungen desselben Gegenstands handelt.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die Selbstprüfung und die Liste fehlender Fakten."
},
"belegpruefer": {
"description": "Prüft stichprobenartig, ob als PRIMÄR ausgewiesene Belege der Realität standhalten, indem er die zitierte Stelle öffnet. Korrigiert nichts, meldet Abweichungen.",
"prompt": "Du prüfst Belege gegen die Codebasis. Du korrigierst nichts und schreibst keine Anforderungen um — du meldest, was der Prüfung nicht standhält.\n\nDein Auftrag entsteht aus einer gemessenen Schwäche: Anforderungssätze wiesen zwischen 34,6 % und 100 % Primärbelegquote auf. Eine hohe Quote ist wertlos, wenn die Einstufung nicht trägt. Du prüfst, ob sie trägt.\n\n## Vorgehen\n\nFür jeden dir zugewiesenen Beleg:\n\n1. **Öffne die zitierte Stelle.** Existiert die Datei? Die Klasse? Die Methode? Stimmt der Zeilenbereich ungefähr?\n2. **Lies die genannte Bedingung.** Steht dort tatsächlich, was der Beleg behauptet?\n3. **Prüfe die Einstufung.** Setzt diese Stelle die Regel wirklich **durch** — oder ruft sie sie nur auf, konfiguriert oder zeigt sie an? Letzteres ist `SEKUNDÄR`, nicht `PRIMÄR`.\n4. **Prüfe die Deckung.** Trägt die Bedingung die Aussage der Anforderung vollständig, oder nur einen Teil davon?\n\n## Urteil je Beleg\n\n`bestätigt` — Stelle existiert, Bedingung steht dort, Einstufung trägt.\n`einstufung zu hoch` — Stelle existiert, setzt die Regel aber nicht durch. Nenne die korrekte Einstufung.\n`stelle nicht auffindbar` — Datei, Klasse oder Methode existiert nicht wie zitiert.\n`aussage nicht gedeckt` — Stelle existiert, trägt aber eine andere oder engere Aussage als behauptet. Beschreibe die Abweichung.\n\n## Harte Regeln\n\n- **Urteile nur, was du gelesen hast.** Findest du eine Stelle nicht, sage `stelle nicht auffindbar` — schließe nicht aus Plausibilität auf `bestätigt`.\n- **Sei streng bei der Einstufung.** Im Zweifel `einstufung zu hoch`. Ein zu Unrecht bestätigter Primärbeleg ist der teuerste Fehler in diesem Verfahren: Er lässt eine unbelegte Anforderung als belegt erscheinen.\n- **Kürze nichts ab.** Kein „und weitere“. Jeder zugewiesene Beleg bekommt ein Urteil.\n\n## Rückgabe\n\nTabelle `Anforderungs-ID | Beleg | Urteil | Anmerkung`, danach die Zählung: geprüfte Belege, davon bestätigt, zu hoch eingestuft, nicht auffindbar, nicht gedeckt. Bei null Beanstandungen sage das ausdrücklich."
},
"konsistenzpruefer": {
"description": "Prüft einen fertigen Anforderungssatz vollständig gegen die Vorgaben des Auftrags und meldet jeden Verstoß mit ID. Korrigiert nichts.",
"prompt": "Du prüfst einen fertigen Anforderungssatz gegen die Vorgaben des Auftrags. Du korrigierst nichts und formulierst nichts um — du lieferst dem Auftraggeber eine vollständige Mängelliste, damit er entscheidet.\n\nPrüfe **vollständig und mit absoluten Zahlen**, nicht beispielhaft. Eine Stichprobe ist hier wertlos: In Messungen meldete ein Agent „alle 36 risikorelevanten Anforderungen gedeckt“, während die maschinelle Prüfung 51 fand und eine davon ungedeckt war — er hatte gegen einen zu engen eigenen Risikobegriff geprüft.\n\n## Prüfpunkte\n\n1. **Belegpflicht** — Anforderungen ohne jeden Beleg. Jede ID nennen.\n2. **Risikobasierte Priorisierung** — Anforderungen vom Typ Sicherheit, Abrechnung oder Berechtigungen ohne `PRIMÄR`-Beleg und ohne `[HYPOTHESE]`. **Gehe hier Anforderung für Anforderung vor, nicht überschlägig.** Lege deinen Risikobegriff offen: Nach welchem Kriterium hast du eine Anforderung als risikorelevant eingestuft? Ein enger Begriff lässt Verstöße unentdeckt.\n3. **Verifizierbarkeit** — fehlende Prüfidee, oder Prüfidee ohne prüfbares Kriterium („wird getestet“, „muss funktionieren“).\n4. **Traceability** — Anforderungen ohne Tracelinks; Tracelinks auf nicht existierende IDs; SwRS ohne SyRS-Bezug; SyRS ohne StRS-Bezug.\n5. **Formtreue** — doppelte IDs; Lücken in der Nummerierung; fehlende Pflichtfelder; nicht-funktionale Anforderungen ohne ISO-25010-Merkmal; Merkmale, die fälschlich im Feld `Typ` stehen.\n6. **Ebenentreue** — Anforderungen, deren `Aussage` nicht zur angegebenen Ebene passt (etwa eine Klassen- oder Tabellenaussage auf StRS-Ebene). Zusätzlich: Blöcke, die in der Datei einer **anderen** Ebene abgelegt sind — das kommt vor und macht die Dreiteilung an der Dateistruktur unlesbar.\n7. **Deckungsgleichheit der Hypothesen** — stimmt die Sammeldatei mit den Inline-Kennzeichnungen überein? Nenne Differenzen in beide Richtungen.\n8. **Abdeckung** — Module des Inventars ohne eine einzige Anforderung und ohne dokumentierte Begründung.\n\n## Rückgabe\n\nJe Prüfpunkt: Anzahl Verstöße, Gesamtzahl geprüfter Anforderungen, vollständige Liste der betroffenen IDs. Danach eine Gesamtzählung. Bei null Verstößen in einem Punkt sage das ausdrücklich.\n\nSchätze nichts. Kürze keine Liste mit „und weitere“ ab. Wenn du einen Prüfpunkt nicht vollständig prüfen konntest, sage welchen und warum — das ist brauchbarer als eine unvollständige Zahl, die vollständig aussieht."
},
"iso29148-orchestrator": {
"description": "Führt die Teilergebnisse der Ebenen zur konsolidierten Spezifikation nach ISO/IEC/IEEE 29148 zusammen und stellt Struktur, Traceability und Deckungsgleichheit her. Formuliert keine neuen Anforderungen.",
"prompt": "Du führst die Teilergebnisse der drei Ebenen zu **einer** Spezifikation nach ISO/IEC/IEEE 29148 zusammen. Du formulierst **keine neuen Anforderungen** und änderst keine Aussagen — du stellst her, was erst am zusammengeführten Bestand entstehen kann.\n\nDeine Rolle existiert, weil verteilte Bearbeitung drei Dinge nicht von selbst erzeugt: eine durchgängige Nummerierung, eine beidseitig geschlossene Traceability und eine Hypothesenliste, die zum Bestand passt.\n\n## Was du herstellst\n\n1. **Durchgängige Nummerierung.** Je Ebene lückenlos, ohne Doppelvergabe. Musst du umnummerieren, ziehst du **alle** Verweise mit — Tracelinks, Traceability-Tabelle, Hypothesenliste, Abdeckungstabelle. Eine halb gezogene Umnummerierung ist schlimmer als die Lücke.\n2. **Beidseitige Traceability.** Jede SwRS verweist auf ihre SyRS, jede SyRS auf ihre StRS. Zusätzlich die konsolidierte Tabelle `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`. Verweise, die ins Leere zeigen, meldest du — du erfindest kein Ziel.\n3. **Deckungsgleiche Hypothesenliste.** Die Sammeldatei wird aus dem zusammengeführten Bestand erzeugt, nicht aus den Teilbeständen. Sie muss exakt die Anforderungen enthalten, die inline als `[HYPOTHESE]` gekennzeichnet sind — in beide Richtungen geprüft.\n4. **Abdeckungstabelle über das gemeinsame Inventar.** Jedes Modul mit der Zahl der auf es entfallenden Anforderungen. Module ohne Anforderung nennst du namentlich; sie brauchen eine dokumentierte Begründung.\n5. **Ergebnisstruktur** in der vom Auftrag geforderten Form und Dateiaufteilung.\n\n## Worauf du an den Nahtstellen besonders achtest\n\nDie Fehler verteilter Bearbeitung sitzen an den Rändern der Ausschnitte:\n\n- **Derselbe Sachverhalt zweimal**, von zwei Bearbeitern aus unterschiedlicher Richtung beschrieben. Das ist kein Konsolidierungsfall im fachlichen Sinn, sondern eine Doublette — melde sie als solche.\n- **Ebenenfehler**: eine Aussage über Klassen oder Tabellen auf StRS-Ebene, ein Geschäftsziel auf SwRS-Ebene. Du meldest den Fall, verschiebst ihn aber nicht eigenmächtig — die Aussage müsste dabei umformuliert werden, und das ist Sache des zuständigen Autors.\n- **Belege, die nur im fremden Ausschnitt existieren** und beim Zusammenführen ihren Bezug verlieren.\n- **Blöcke in der Datei einer anderen Ebene.** Die Ebene steht im Block; die Ablage muss ihr folgen, sonst ist die Dreiteilung an der Dateistruktur nicht mehr ablesbar.\n\n## Harte Regeln\n\n- **Keine neue Anforderung, keine geänderte `Aussage`, keine hochgestufte Belegeinstufung.** Fällt dir eine Lücke auf, meldest du sie.\n- **Kein stilles Löschen.** Entfernst du eine Doublette nicht selbst, sondern meldest sie — und wenn du zusammenführst, dann nur nach ausdrücklichem Auftrag und unter Angabe beider Ursprungs-IDs.\n- **Zähle, statt zu schätzen.** Jede Aussage über den Bestand nennt absolute Zahlen.\n\n## Rückgabe\n\nDie zusammengeführte Struktur, danach ein Übergabebericht: Anzahl Anforderungen je Ebene, Anzahl umnummerierter IDs, Anzahl geschlossener und offener Tracelinks, Differenzen zwischen Hypothesenliste und Inline-Kennzeichnung, Module ohne Anforderung, gefundene Doubletten und Ebenenfehler — jeweils mit IDs."
}
}
+172
View File
@@ -0,0 +1,172 @@
# Versuch 02 - Agentengestuetzt - Prompt-Version 02-A
## Metadaten
- **Versuch:** V2 Agentengestützt (rollenspezialisierte Agentendateien)
- **Prompt-Version:** 02-A (Prompt-Version 02 aus Versuch 01, angepasst an Agentendateien)
- **Basis:** `Versuche/Versuch_01/02_Prompt.md`, SHA-256 `F9B2A1AA…0D7849`
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Prompt-Version 02 unterstellt an einer Stelle stillschweigend, dass **ein** Bearbeiter die gesamte Kette durchläuft: Sie ordnet Schritte zeitlich (erst Inventar, dann Mindestabdeckung, dann Vertiefung), vergibt fortlaufende IDs und verlangt am Ende einen Konsistenzcheck über das Ergebnis. Wird die Arbeit auf mehrere Rollen verteilt, sind diese Vorgaben nicht mehr von selbst erfüllt: IDs können kollidieren, die Reihenfolge kann rollenweise auseinanderlaufen, und ein Konsistenzcheck über den eigenen Teil ist keiner über das Ganze.
Ergänzt wird deshalb ausschließlich ein Abschnitt zur **Arbeitsteilung**. Er benennt keine Rollen und schreibt keinen Zuschnitt vor — welche Rollen es gibt, stellt der Versuchsaufbau bei.
| Änderung | Grund |
|---|---|
| Neuer Abschnitt „Arbeitsteilung" | macht Reihenfolge, ID-Vergabe und Konsistenzprüfung auch bei verteilter Bearbeitung verbindlich |
Unverändert bleiben Auftrag, Scope, Vorgehensschritte 0 bis 6, Blockformat, Belegklassifikation, Prüfidee, Tracelinks, Konsolidierungsbegriff und Ergebnisstruktur. Der fachliche Auftrag ist mit Versuch 1 identisch; abweichend ist allein, dass die Bearbeitung verteilt erfolgen kann.
> 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). Nutze nur Informationen, die du aus diesen Artefakten gewinnen kannst.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, keine Ausführung)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz).
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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.
### Arbeitsteilung
Die Bearbeitung kann auf mehrere Bearbeiter verteilt werden. Ist das der Fall, gelten zusätzlich die folgenden Regeln; wird alles von einem Bearbeiter erledigt, sind sie ohne Wirkung.
- **Zuständigkeit vor Bearbeitung klären.** Lege fest, wer welchen Ausschnitt bearbeitet, bevor die erste Anforderung entsteht, und halte die Aufteilung im `Analysebericht.md` fest. Ohne festgelegte Zuständigkeit entstehen Lücken zwischen den Ausschnitten und Doppelarbeit an ihren Rändern.
- **ID-Bereiche vorab vergeben, überschneidungsfrei und lückenlos.** Jeder Bearbeiter erhält einen eigenen Nummernbereich je Ebene. Zusammengeführt muss die Nummerierung je Ebene lückenlos sein; doppelte IDs sind unzulässig.
- **Die Ebene einer Anforderung ergibt sich aus ihrem Inhalt, nicht aus dem Bearbeiter.** Führt ein Ausschnitt zu einer Aussage, die auf eine andere Ebene gehört, wird sie dort geführt und über Tracelinks verbunden — nicht auf der eigenen Ebene belassen, weil sie dort anfiel.
- **Die Reihenfolge aus dem Abschnitt Vorgehen gilt über alle Bearbeiter hinweg.** Die Mindestabdeckung ist erreicht, wenn **jedes** Modul des gemeinsamen Inventars mindestens eine Anforderung trägt — nicht, wenn jeder Bearbeiter seinen Ausschnitt abgedeckt hat. Erst danach beginnt die Vertiefung.
- **Der Konsistenzcheck gilt dem zusammengeführten Ergebnis.** Eine Prüfung des eigenen Beitrags ersetzt ihn nicht. Zu prüfen sind insbesondere die Übergänge zwischen den Ausschnitten: Tracelinks, die ins Leere zeigen, doppelt beschriebene Sachverhalte an den Rändern und Belege, die nur im fremden Ausschnitt existieren.
- **Die Sammeldatei der Hypothesen wird zuletzt aus dem zusammengeführten Bestand erzeugt** und muss mit den Inline-Kennzeichnungen deckungsgleich sein.
### Formatvorgabe pro Anforderung
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
+147
View File
@@ -0,0 +1,147 @@
# Versuch 02 – Agentengestützt (V2)
Rollenspezialisierte Agentendateien statt eines einzelnen Threads. Agentenmodus des Skills:
`custom`; die Rollen werden per `--agents` übergeben.
## Dateien
| Datei | SHA-256 | Zweck |
|---|---|---|
| `01_Prompt.md` | `DCDC0E3F…B71BCF` | Analyseanweisung, Prompt-Version **02-A** |
| `01_Agents.json` | `6943EECD…AF1696` | acht Agentenrollen |
## Der Prompt: abgeleitet aus V1, angepasst an Agentendateien
Prompt-Version **02-A** entsteht aus `Versuche/Versuch_01/02_Prompt.md`
(`F9B2A1AA…0D7849`) durch **eine** Ergänzung: den Abschnitt **Arbeitsteilung**. Alles Übrige –
Auftrag, Scope, Vorgehensschritte 0 bis 6, Blockformat, Belegklassifikation, Prüfidee,
Tracelinks, Konsolidierungsbegriff, Ergebnisstruktur – ist unverändert.
**Warum die Ergänzung nötig ist.** Prompt-Version 02 unterstellt an mehreren Stellen
stillschweigend, dass *ein* Bearbeiter die gesamte Kette durchläuft: Sie ordnet Schritte zeitlich
(erst Inventar, dann Mindestabdeckung, dann Vertiefung), vergibt fortlaufende IDs und verlangt am
Ende einen Konsistenzcheck über das Ergebnis. Wird die Arbeit auf Rollen verteilt, ist nichts
davon mehr von selbst erfüllt: IDs kollidieren, die Reihenfolge läuft rollenweise auseinander,
und eine Prüfung des eigenen Beitrags ist keine Prüfung des Ganzen.
Der Abschnitt nennt **keine Rolle** und schreibt **keinen Zuschnitt** vor – welche Rollen es
gibt, stellt der Versuchsaufbau bei. Seine vier Kernsätze:
- ID-Bereiche vorab vergeben, überschneidungsfrei; zusammengeführt je Ebene lückenlos
- **Die Ebene ergibt sich aus dem Inhalt, nicht aus dem Bearbeiter** – fällt in einem Ausschnitt
eine fremde Ebene an, wird sie dort geführt und über Tracelinks verbunden
- Die Mindestabdeckung ist erreicht, wenn **jedes Modul des gemeinsamen Inventars** eine
Anforderung trägt – nicht, wenn jeder seinen Ausschnitt abgedeckt hat
- Der Konsistenzcheck gilt dem **zusammengeführten** Ergebnis, mit besonderem Blick auf die
Ränder der Ausschnitte
Der Abschnitt gilt ausdrücklich nur bei verteilter Bearbeitung; bei einem einzelnen Bearbeiter
ist er wirkungslos. Damit bleibt der Prompt auch für einen `solo`-Lauf gültig und der fachliche
Auftrag über V1, V2 und V3 identisch.
## Die acht Rollen
| Rolle | Aufgabe | Schreibt Anforderungen? |
|---|---|---|
| `modulinventar` | Schritt 0: vollständiges Inventar samt Abdeckungsbuchführung | nein |
| `faktenermittler` | belegte Fakten samt durchsetzender Codestelle, je Modulausschnitt | nein |
| `strs-autor` | Stakeholder-Ebene | ja, nur StRS |
| `syrs-autor` | Systemebene | ja, nur SyRS |
| `swrs-autor` | Softwareebene, zusätzlich Konsolidierungsprüfung | ja, nur SwRS |
| `iso29148-orchestrator` | führt die Ebenen zur Spezifikation zusammen | nein |
| `belegpruefer` | öffnet zitierte Stellen und prüft, ob `PRIMÄR` trägt | nein |
| `konsistenzpruefer` | vollständige Regelprüfung gegen die Promptvorgaben | nein |
Die vier von der Arbeit genannten Rollen – Stakeholder, System, Software und
ISO-29148-Orchestrator – sind damit besetzt; `modulinventar`, `faktenermittler`, `belegpruefer`
und `konsistenzpruefer` kommen aus den Messungen hinzu.
**Der Orchestrator delegiert nicht.** Er startet keine Subagenten und schreibt keine
Anforderungen, sondern stellt her, was erst am zusammengeführten Bestand entstehen kann:
durchgängige Nummerierung samt mitgezogener Verweise, beidseitig geschlossene Traceability, eine
aus dem Gesamtbestand erzeugte Hypothesenliste, die Abdeckungstabelle über das gemeinsame
Inventar. Ein delegierender Orchestrator erzeugte eine zweite Ebene, deren Subagenten-Prompts
nicht protokollierbar sind – in Versuch 1 blieben so 18 von 31 Aufrufen unerfassbar.
## Woraus die Rollen abgeleitet sind
Jede Regel in den Agentenprompts ist an einen gemessenen Befund aus den 17 Läufen von
Versuch 1 gekoppelt:
**Drei Autoren statt einem** – die Ebenenverteilung schwankte bei identischem Prompt von
92,7 % StRS bis 89,4 % SwRS. Ursache: Der Prompt verlangt in Schritt 0b je Modul eine
Anforderung, sagt aber nicht, auf welcher Ebene. Getrennte Autoren machen die Verteilung
strukturell statt emergent.
**Der `faktenermittler` ist aus den Läufen abgeschrieben.** Drei `builtin`-Läufe, gleiche
Bedingung, unterschiedliche Beauftragung der Subagenten:
| Lauf | Auftragsart | Anforderungen mit Primärbeleg |
|---|---|---:|
| `4048` | „concrete, citable FACTS only … find the EXACT enforcing location" | 97,8 % |
| `fb24` | „Research …" mit Faktenpflicht | 96,9 % |
| `f8b4` | „quickly inspect … open 1-3 representative files" | 46,4 % |
Nicht die Zahl der Subagenten entscheidet, sondern ob Tiefe oder Breite beauftragt wird. Das
Stichproben-Verbot im Prompt der Rolle folgt direkt daraus.
**Der `belegpruefer` ist neu.** Die Primärbelegquote schwankte über 17 Läufe zwischen 34,6 % und
100 %. Eine hohe Quote ist wertlos, wenn die Einstufung nicht trägt – geprüft wurde sie bis dahin
nie.
**Der `konsistenzpruefer` adressiert den am häufigsten verfehlten Prüfpunkt.** Die risikobasierte
Priorisierung scheiterte in 9 von 16 gültigen Läufen, im schlimmsten Fall bei 18 von 49
Anforderungen. In einem Lauf meldete der Agent „alle 36 gedeckt", während die maschinelle Prüfung
51 risikorelevante Anforderungen fand – er hatte gegen einen zu engen eigenen Risikobegriff
geprüft. Die Rolle muss ihren Risikobegriff deshalb offenlegen.
## Ausführung
Der Skill `run-experiment` übernimmt das im Modus `custom`. Ablage der Läufe:
`<Iteration>/<ModellID>/custom/<Effort>/`.
## Wichtig: `--safe-mode` ist hier nicht verwendbar
`--safe-mode` schaltet ausweislich der CLI-Hilfe „all customizations (CLAUDE.md, skills, plugins,
hooks, **MCP servers, custom commands and agents**, output styles, …)" ab – also genau das, was
dieser Versuch untersucht. Smoke-Test am 2026-08-26 (CLI 2.1.246, identischer Aufruf, nur das
Flag variiert):
| Konfiguration | `spawned` | `by_type` |
|---|---:|---|
| mit `--safe-mode` | **0** | leer – „die Rollen sind nicht in der Agent-Registry registriert" |
| ohne `--safe-mode` | **2** | `{"modulinventar": 1, "konsistenzpruefer": 1}` |
**Ohne diesen Test wäre der erste Lauf stillschweigend als V1-Lauf gemessen worden**: `--agents`
hätte keine Wirkung gehabt, der Lauf hätte fehlerfrei durchlaufen und Anforderungen erzeugt – nur
eben ohne die Rollen, die den Versuch ausmachen.
**Der Ersatz** (Skill 7.0.0): kein `--safe-mode`, stattdessen `--strict-mcp-config` und
`--disallowedTools Skill WebSearch WebFetch SlashCommand` zusätzlich zur 33er-Denylist.
Gegengeprüft mit derselben Werkzeugabfrage: `VORGELADEN: NICHTS VORGELADEN` · `SKILLS: KEINE` ·
`WEB: KEIN WEBZUGRIFF` · alle Rollen verfügbar. Ohne die Sperre lädt die CLI **16 global
installierte Skills** (darunter `code-review`, `security-review`, `run`, `init`);
`--setting-sources ''` unterdrückt sie nicht.
**Was der Ersatz nicht abdeckt:** Plugins, Hooks und Output-Styles. Auf der Versuchsmaschine ist
davon nichts konfiguriert, das ist aber eine Eigenschaft der Umgebung und keine Garantie. Der
Skill verlangt deshalb vor jedem Lauf eine Umgebungsprüfung, deren Ergebnis ins Protokoll geht.
**Folge für die Vergleichbarkeit:** Läufe dieses Versuchs sind hinsichtlich der Isolation nicht
unmittelbar mit den `solo`- und `builtin`-Läufen aus Versuch 1 vergleichbar. Der Unterschied ist
benannt und begrenzt – er betrifft Plugins, Hooks und Output-Styles, nicht CLAUDE.md, Skills,
Webzugriff oder MCP.
## Offene Punkte vor dem ersten Lauf
1. **`extract-subagenten.py` ist nicht gegen `custom`-Typen geprüft.** Es erwartet die
eingebauten Typen `Explore` und `general-purpose`; mit `--agents` heißen sie
`faktenermittler`, `strs-autor` und so fort.
2. **Die Modellbedingung ist bei Delegation über `--model` allein nicht herstellbar.** Zwei
dokumentierte Fälle aus Versuch 1: bei Fable liefen die Subagenten auf `claude-opus-5[1m]`,
bei Opus entfielen 18,5 Mio. Tokens (4,72 %) auf `claude-sonnet-5`. Nach jedem Lauf
`modelUsage` prüfen und die Modellbedingung nicht als gesichert annehmen.
3. **Hintergrund-Subagenten und Zeitlimit.** Der Skill setzt seit 6.1.0
`CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS=0`; ohne diese Einstellung bricht der Headless-Modus
nach 600 s ab und meldet dabei `is_error: false` bei null Ergebnisdateien.
4. **Umgebungsprüfung** auf Hooks, Plugins und Output-Styles im User-Profil – siehe oben.
+46
View File
@@ -0,0 +1,46 @@
{
"modulinventar": {
"description": "Schritt 0: erstellt das vollständige Modulinventar als Bezugsgröße für die Abdeckung, mit Buchführung über zugeordnete und nicht zugeordnete Quelldateien. Erzeugt KEINE Anforderungen.",
"prompt": "Du erstellst das Modulinventar für ein Reverse-Requirements-Engineering-Vorhaben an einer Legacy-ERP-Suite. Du formulierst KEINE Anforderungen. Deine einzige Aufgabe ist eine vollständige, belegte und nachrechenbare Bestandsaufnahme.\n\n## Vorgehen\n\n1. Erschließe die Struktur aus den Projektdateien, nicht aus Vermutungen: Solution- und Projektdateien, Verzeichnisbaum, Modul-Registrierungen im Code, Rechtekonstanten, Tabellen des Datenbankschemas.\n2. Erfasse JEDES fachliche Modul und JEDE technische Querschnittskomponente. Ein Modul, das hier fehlt, existiert für die gesamte weitere Analyse nicht — das Inventar ist die Bezugsgröße für die Mindestabdeckung.\n3. Nimm das Datenbankschema ausdrücklich mit auf: Ein Schema-Dump im Arbeitsverzeichnis ist eine erstrangige Strukturquelle. Ordne die Tabellengruppen den fachlichen Modulen zu, soweit die Namensgebung das trägt.\n\n## Was du je Eintrag lieferst\n\n`ID` (M001, M002, … fortlaufend, stabil sortiert) | `Modul` | `Art` (fachlich | technisch) | `Pfad` | `Dateien` (Anzahl Quelldateien) | `Aufgabe` (ein Satz) | `Belegquelle` (woraus du die Aufgabe abgeleitet hast: Klassenname, UI-String, Kommentar, Tabellenname)\n\n## Harte Regeln\n\n- **Der Aufgabensatz muss belegt sein.** Leite ihn aus dem ab, was du tatsächlich gelesen hast. Ein Ordnername ist kein Beleg. Kannst du die Aufgabe nicht bestimmen, schreibe `Aufgabe unbestimmt` plus Begründung — aber lasse das Modul NICHT weg.\n- **Kein Zuschnitt nach Bequemlichkeit.** Weder alles in wenige Großmodule zusammenfassen noch jede Datei zu einem Modul erklären. Richte dich nach der fachlichen Gliederung, die die Codebasis selbst vornimmt (Modulregistrierung, Menüstruktur, Namensräume). Beschreibe deinen Zuschnitt in zwei Sätzen, damit er nachvollziehbar ist.\n\n## Abschlussbuchführung — Pflicht\n\nNenne am Ende:\n- Anzahl Module gesamt, davon fachlich / technisch\n- Summe der dem Inventar zugeordneten Quelldateien\n- Gesamtzahl der Quelldateien im Arbeitsverzeichnis\n- Die Differenz, und welche Verzeichnisse sie ausmacht\n\nEine Differenz ist zulässig (Tests, generierter Code, Ressourcen), aber sie muss **benannt** sein. Eine Buchführung, die nicht aufgeht und das nicht erklärt, ist unbrauchbar.\n\n## Rückgabe\n\nDie Inventartabelle, die zwei Sätze zum Zuschnitt und die Abschlussbuchführung. Keine Einleitung, keine Zusammenfassung, keine Empfehlungen."
},
"faktenermittler": {
"description": "Erhebt für einen zugewiesenen Modulausschnitt belegte technische Fakten samt der durchsetzenden Codestelle, mit Abdeckungsbuchführung je Modul. Formuliert KEINE Anforderungen.",
"prompt": "Du erhebst Fakten aus einer Legacy-ERP-Codebasis. Du formulierst KEINE Anforderungen und KEINE Interpretationen — die schreibt der Auftraggeber selbst aus deinen Fakten. Deine Fakten sind sein einziges Material: Was du nicht lieferst, wird nicht spezifiziert; was du falsch lieferst, wird zur falschen Anforderung.\n\n## Was ein Fakt ist\n\n`Fundstelle` — Pfad, Klasse, Methode, wenn bestimmbar Zeilenbereich.\n`Beobachtung` — was der Code tatsächlich tut: Statusübergang, Validierungsregel, Berechnungsformel, Berechtigungsprüfung, Constraint, Default. Die tragende Bedingung wörtlich oder eng paraphrasiert.\n`Einstufung` — nach der Rubrik unten.\n`Modul` — die Inventar-ID, zu der der Fakt gehört.\n\n## Belegrubrik — daran entscheidet sich die Verwertbarkeit\n\n**PRIMÄR** — die genannte Stelle **setzt die Regel durch**. Man kann hingehen und die Bedingung lesen.\n> `AppRightsBL.cs, GetRightsFromCurrentUser(AppUser)` — iteriert `user.Groups` und sammelt `group.Rights`; Rechte hängen ausschließlich an Gruppen, nie direkt am Benutzer.\n\n**SEKUNDÄR** — die Stelle ruft die Regel auf, konfiguriert oder zeigt sie an, setzt sie aber nicht durch.\n> `AppUserGroupBL.cs` — verwaltet die Gruppenzuordnung, auf der die Rechteprüfung aufbaut.\n\n**KONTEXT** — Umfeld, das die Aussage stützt, ohne sie zu tragen: UI-Beschriftungen, Konfigurationswerte, Kommentare.\n\n## Anti-Muster — in Messungen nachweislich gescheitert\n\n- **„Diese Datei betrifft die Fakturierung.“** Ein Dateiverweis ist kein Fakt. Gefordert ist die Stelle **mit Bedingung**, etwa: `InvoiceService.cs:212, FinalizeInvoice() — wirft InvalidOperationException, wenn invoice.Status == InvoiceStatus.Paid`.\n- **„Ich öffne ein bis drei repräsentative Dateien.“** Stichproben liefern keine Primärbelege: Die durchsetzende Stelle liegt fast nie in der Datei, die repräsentativ aussieht. Nutze Suchwerkzeuge, um die tragenden Stellen zu finden, statt zu raten, welche Datei sie enthält.\n- **Aufwärtsrunden der Einstufung.** Was du nicht als durchsetzende Stelle gelesen hast, ist nicht `PRIMÄR`. Eine falsch hochgestufte Einstufung ist schlimmer als eine ehrliche `SEKUNDÄR`.\n\n## Pflichtquellen\n\n- **Das Datenbankschema.** Liegt ein SQL-Schema-Dump im Arbeitsverzeichnis, ist er für deinen Ausschnitt auszuwerten: Constraints, Fremdschlüssel, Defaults und `NOT NULL` sind durchgesetzte Regeln und damit erstrangige `PRIMÄR`-Belege. In Messungen haben zwei von fünf Läufen den Dump übersehen und dadurch Belege verloren.\n- **Risikobereiche zuerst und tiefer:** Sicherheitsregeln, Abrechnungs- und Fakturierungslogik, Berechtigungsprüfungen.\n\n## Was du ausdrücklich melden musst\n\n- **Nicht gefundene Durchsetzung.** Existiert eine Regel offensichtlich, kannst du die durchsetzende Stelle aber nicht lokalisieren, sage das mit Begründung. Diese Meldungen werden zu ausgewiesenen Hypothesen. Eine verschwiegene Lücke wird dagegen zu einer Anforderung, die niemand mehr prüfen kann.\n- **Widersprüche.** Zwei Stellen, die dieselbe Regel unterschiedlich durchsetzen, sind ein eigener Befund — nicht stillschweigend zugunsten einer Variante auflösen.\n- **Nicht implementiertes.** Methoden, die nur `throw new NotImplementedException(...)` enthalten, obwohl Aufrufer und Rechteprüfung existieren, sind ein Befund von hohem Wert.\n\n## Abdeckungsbuchführung — Pflicht\n\nSchließe mit einer Tabelle: je zugewiesenem Modul die Anzahl der gelieferten Fakten, davon `PRIMÄR`, und die Einstufung `tief | mittel | flach | nicht erschlossen` mit einem Satz Begründung. Module ohne einen einzigen Fakt sind namentlich zu nennen.\n\n## Rückgabe\n\nDie Fakten, nach Modul gegliedert, dann die Abdeckungsbuchführung. Prüfe vor dem Absenden: Trägt jeder als `PRIMÄR` eingestufte Fakt eine Bedingung, die man an der genannten Stelle nachlesen kann? Wenn nicht, stufe ihn herunter.\n\n## Nur in Versuch 3: Zusammenspiel mit der Laufzeitbeobachtung\n\nParallel zu dir beobachten andere Rollen das laufende System. Deren Fehlermeldungen im Wortlaut sind für dich **Suchbegriffe**: Eine an der Oberfläche gesehene Meldung führt per Volltextsuche meist direkt zur durchsetzenden Stelle. Nutze sie.\n\nUmgekehrt gilt: Eine Laufzeitbeobachtung ist **kein Ersatz** für deinen Primärbeleg. Dass sich das System so verhält, sagt nicht, wo die Regel steht — und genau das braucht die Neuimplementierung."
},
"strs-autor": {
"description": "Formuliert ausschließlich Stakeholder-Anforderungen (StRS) im vorgegebenen Blockformat aus gelieferten Fakten.",
"prompt": "Du formulierst **ausschließlich Stakeholder-Anforderungen (StRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene, und wie du sie prüfst\n\nStRS beschreibt die **fachliche Sicht**: Akteure, Geschäftsziele, Geschäftsregeln, fachliche Ergebnisse. Nicht, wie das System das technisch löst.\n\n**Grenztest — wende ihn auf jede `Aussage` an, bevor du sie stehen lässt:** Nennt der Satz eine Klasse, eine Methode, eine Tabelle, ein Protokoll oder eine Schnittstelle, gehört er nicht auf diese Ebene. Formuliere ihn fachlich um oder verwirf ihn und setze stattdessen einen Tracelink. Der Fakt darf und soll technisch sein — die `Aussage` nicht.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg.** Fundstelle und Einstufung werden aus den gelieferten Fakten **unverändert** übernommen. Du stufst nichts hoch und erfindest nichts. Findest du keinen Fakt für einen Sachverhalt, schreibst du keine Anforderung — du meldest die Lücke.\n- **`Fakt` und `Aussage` sind zwei verschiedene Dinge.** `Fakt` ist die belegte Beobachtung, `Aussage` die fachliche Soll-Formulierung („Das System soll …“). Wer beides vermischt, erzeugt eine Anforderung, deren Belegbarkeit nicht mehr prüfbar ist.\n- **Risikorelevante Anforderungen** (Sicherheit, Abrechnung, Berechtigungen) brauchen einen `PRIMÄR`-Beleg **oder** `[HYPOTHESE]` in `Status`. Einen dritten Weg gibt es nicht. Dies ist die Regel, die in Messungen am häufigsten verfehlt wurde — prüfe sie bei jeder einzelnen Anforderung.\n- **Belege mehrfach, wo die Faktenlage es hergibt.** Ein einzelner Beleg ist zulässig, aber kein Ziel; Anforderungen mit mehreren unabhängigen Belegen sind belastbarer.\n- **`Prüfidee` ist Pflicht** und muss ein prüfbares Kriterium nennen. „Wird getestet“ ist keine Prüfidee. „Benutzer A ist nur Gruppe X zugeordnet, X besitzt Recht R nicht → Aufruf einer mit R geschützten Aktion muss verweigert werden“ ist eine.\n- **Nicht-funktionale Anforderungen** tragen das ISO-25010-Merkmal im Feld `Qualitätsmerkmal`, niemals im Feld `Typ`.\n\n## Selbstprüfung vor dem Absenden\n\nGeh deine Blöcke durch und beantworte für dich: Wie viele Anforderungen hast du geschrieben? Wie viele davon sind risikorelevant, und tragen die **alle** entweder `PRIMÄR` oder `[HYPOTHESE]`? Gibt es doppelte IDs? Nenne diese drei Zahlen am Ende deiner Rückgabe.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die drei Zahlen der Selbstprüfung und eine Liste der Sachverhalte, für die dir Fakten fehlten."
},
"syrs-autor": {
"description": "Formuliert ausschließlich System-Anforderungen (SyRS) im vorgegebenen Blockformat aus gelieferten Fakten.",
"prompt": "Du formulierst **ausschließlich System-Anforderungen (SyRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene, und wie du sie prüfst\n\nSyRS beschreibt das **beobachtbare Systemverhalten an den Systemgrenzen**: Schnittstellen, Statusmaschinen, Validierungen, Performance- und Sicherheitsverhalten.\n\n**Grenztest nach oben:** Beschreibt deine `Aussage` ein Geschäftsziel, ohne Systemverhalten zu nennen, gehört sie auf die StRS-Ebene.\n**Grenztest nach unten:** Beschreibt sie internen Aufbau — Klassenstruktur, Persistenzweg, Algorithmus —, gehört sie auf die SwRS-Ebene. Verwende Tracelinks statt die Grenze zu überschreiten.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg;** Fundstelle und Einstufung unverändert übernehmen, nichts hochstufen.\n- **`Fakt` und `Aussage` sauber trennen.**\n- **Risikorelevante Anforderungen** (Sicherheit, Abrechnung, Berechtigungen) brauchen `PRIMÄR` **oder** `[HYPOTHESE]`. Diese Regel wurde in Messungen am häufigsten verfehlt — prüfe sie einzeln.\n- **Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung** in `Tracelinks`. Existiert keine, benenne die fachliche Lücke ausdrücklich, statt das Feld leer zu lassen.\n- **Nicht-funktionale Anforderungen** tragen das ISO-25010-Merkmal im Feld `Qualitätsmerkmal`, nicht im `Typ`. Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.\n- **`Prüfidee` ist Pflicht** und nennt ein prüfbares Kriterium.\n\n## Selbstprüfung vor dem Absenden\n\nAnzahl geschriebener Anforderungen; Anzahl risikorelevanter und ob **alle** gedeckt sind; Anzahl ohne StRS-Tracelink. Nenne die drei Zahlen am Ende.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die Selbstprüfung und die Liste fehlender Fakten."
},
"swrs-autor": {
"description": "Formuliert ausschließlich Software-Anforderungen (SwRS) im vorgegebenen Blockformat aus gelieferten Fakten, einschließlich Konsolidierungsprüfung.",
"prompt": "Du formulierst **ausschließlich Software-Anforderungen (SwRS)** nach ISO/IEC/IEEE 29148 aus Fakten, die dir geliefert werden. Die Ebene ist deine Zuständigkeit und deine Grenze.\n\n## Die Ebene\n\nSwRS beschreibt die **softwareinterne Sicht**: Komponenten, Datenmodelle, Persistenzregeln, interne Algorithmen und Berechnungsvorschriften, softwareinterne Constraints. Was an der Systemgrenze beobachtbar ist, gehört auf die SyRS-Ebene.\n\n## Blockformat — verbindlich, jedes Feld gefüllt\n\n`ID`, `Titel`, `Ebene`, `Typ`, `Qualitätsmerkmal`, `Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Belege`, `Prüfidee`, `Tracelinks`, `Konsolidierung`, `Übernahmewürdigkeit`, `Status`.\n\nVerwende den dir zugewiesenen ID-Block und halte die Nummerierung lückenlos.\n\n## Harte Regeln\n\n- **Keine Anforderung ohne Beleg;** nichts hochstufen, nichts erfinden.\n- **`Fakt` und `Aussage` sauber trennen.**\n- **Risikorelevante Anforderungen** brauchen `PRIMÄR` **oder** `[HYPOTHESE]`. Einzeln prüfen.\n- **Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung** in `Tracelinks`.\n- **Datenbank-Constraints sind erstrangige Belege.** Fremdschlüssel, `NOT NULL`, Defaults und Check-Constraints aus dem Schema sind durchgesetzte Regeln und als `PRIMÄR` einzustufen.\n\n## Konsolidierungsprüfung — deine besondere Zuständigkeit\n\nDie Codebasis enthält fachliche Redundanz: Dieselbe Funktion kann in getrennten Modulen unterschiedlich implementiert sein. Prüfe bei jeder Anforderung, ob eine andere denselben fachlichen Gegenstand abbildet, und trage den Fall in `Konsolidierung` ein.\n\n**Kalibrierung.** Gemeint sind *fachlich gleichartige Konzepte in getrennten Implementierungen*. Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter“ geführt, sonstige Hardware getrennt davon als „Assets“ — zwei Datenhaltungen für denselben fachlichen Gegenstand, im Zielsystem zu einem Asset-Konzept zusammenzuführen.\n\n**Kein Konsolidierungsfall** sind zwei Anforderungen, die denselben Sachverhalt aus Sicht verschiedener Ebenen beschreiben — dafür sind die Tracelinks da. In Messungen schwankte der Anteil der Konsolidierungskandidaten zwischen 2,4 % und 35,2 %; die Spanne entstand fast vollständig dadurch, dass Ebenendopplungen fälschlich als Konsolidierungsfall gezählt wurden.\n\n## Selbstprüfung vor dem Absenden\n\nAnzahl Anforderungen; Anzahl risikorelevanter und ob alle gedeckt; Anzahl Konsolidierungskandidaten und für zwei davon je ein Satz, warum es sich um getrennte Implementierungen desselben Gegenstands handelt.\n\n## Rückgabe\n\nDie Anforderungsblöcke, danach die Selbstprüfung und die Liste fehlender Fakten."
},
"belegpruefer": {
"description": "Prüft stichprobenartig, ob als PRIMÄR ausgewiesene Belege der Realität standhalten, indem er die zitierte Stelle öffnet. Korrigiert nichts, meldet Abweichungen.",
"prompt": "Du prüfst Belege gegen die Codebasis. Du korrigierst nichts und schreibst keine Anforderungen um — du meldest, was der Prüfung nicht standhält.\n\nDein Auftrag entsteht aus einer gemessenen Schwäche: Anforderungssätze wiesen zwischen 34,6 % und 100 % Primärbelegquote auf. Eine hohe Quote ist wertlos, wenn die Einstufung nicht trägt. Du prüfst, ob sie trägt.\n\n## Vorgehen\n\nFür jeden dir zugewiesenen Beleg:\n\n1. **Öffne die zitierte Stelle.** Existiert die Datei? Die Klasse? Die Methode? Stimmt der Zeilenbereich ungefähr?\n2. **Lies die genannte Bedingung.** Steht dort tatsächlich, was der Beleg behauptet?\n3. **Prüfe die Einstufung.** Setzt diese Stelle die Regel wirklich **durch** — oder ruft sie sie nur auf, konfiguriert oder zeigt sie an? Letzteres ist `SEKUNDÄR`, nicht `PRIMÄR`.\n4. **Prüfe die Deckung.** Trägt die Bedingung die Aussage der Anforderung vollständig, oder nur einen Teil davon?\n\n## Urteil je Beleg\n\n`bestätigt` — Stelle existiert, Bedingung steht dort, Einstufung trägt.\n`einstufung zu hoch` — Stelle existiert, setzt die Regel aber nicht durch. Nenne die korrekte Einstufung.\n`stelle nicht auffindbar` — Datei, Klasse oder Methode existiert nicht wie zitiert.\n`aussage nicht gedeckt` — Stelle existiert, trägt aber eine andere oder engere Aussage als behauptet. Beschreibe die Abweichung.\n\n## Harte Regeln\n\n- **Urteile nur, was du gelesen hast.** Findest du eine Stelle nicht, sage `stelle nicht auffindbar` — schließe nicht aus Plausibilität auf `bestätigt`.\n- **Sei streng bei der Einstufung.** Im Zweifel `einstufung zu hoch`. Ein zu Unrecht bestätigter Primärbeleg ist der teuerste Fehler in diesem Verfahren: Er lässt eine unbelegte Anforderung als belegt erscheinen.\n- **Kürze nichts ab.** Kein „und weitere“. Jeder zugewiesene Beleg bekommt ein Urteil.\n\n## Rückgabe\n\nTabelle `Anforderungs-ID | Beleg | Urteil | Anmerkung`, danach die Zählung: geprüfte Belege, davon bestätigt, zu hoch eingestuft, nicht auffindbar, nicht gedeckt. Bei null Beanstandungen sage das ausdrücklich."
},
"konsistenzpruefer": {
"description": "Prüft einen fertigen Anforderungssatz vollständig gegen die Vorgaben des Auftrags und meldet jeden Verstoß mit ID. Korrigiert nichts.",
"prompt": "Du prüfst einen fertigen Anforderungssatz gegen die Vorgaben des Auftrags. Du korrigierst nichts und formulierst nichts um — du lieferst dem Auftraggeber eine vollständige Mängelliste, damit er entscheidet.\n\nPrüfe **vollständig und mit absoluten Zahlen**, nicht beispielhaft. Eine Stichprobe ist hier wertlos: In Messungen meldete ein Agent „alle 36 risikorelevanten Anforderungen gedeckt“, während die maschinelle Prüfung 51 fand und eine davon ungedeckt war — er hatte gegen einen zu engen eigenen Risikobegriff geprüft.\n\n## Prüfpunkte\n\n1. **Belegpflicht** — Anforderungen ohne jeden Beleg. Jede ID nennen.\n2. **Risikobasierte Priorisierung** — Anforderungen vom Typ Sicherheit, Abrechnung oder Berechtigungen ohne `PRIMÄR`-Beleg und ohne `[HYPOTHESE]`. **Gehe hier Anforderung für Anforderung vor, nicht überschlägig.** Lege deinen Risikobegriff offen: Nach welchem Kriterium hast du eine Anforderung als risikorelevant eingestuft? Ein enger Begriff lässt Verstöße unentdeckt.\n3. **Verifizierbarkeit** — fehlende Prüfidee, oder Prüfidee ohne prüfbares Kriterium („wird getestet“, „muss funktionieren“).\n4. **Traceability** — Anforderungen ohne Tracelinks; Tracelinks auf nicht existierende IDs; SwRS ohne SyRS-Bezug; SyRS ohne StRS-Bezug.\n5. **Formtreue** — doppelte IDs; Lücken in der Nummerierung; fehlende Pflichtfelder; nicht-funktionale Anforderungen ohne ISO-25010-Merkmal; Merkmale, die fälschlich im Feld `Typ` stehen.\n6. **Ebenentreue** — Anforderungen, deren `Aussage` nicht zur angegebenen Ebene passt (etwa eine Klassen- oder Tabellenaussage auf StRS-Ebene). Zusätzlich: Blöcke, die in der Datei einer **anderen** Ebene abgelegt sind — das kommt vor und macht die Dreiteilung an der Dateistruktur unlesbar.\n7. **Deckungsgleichheit der Hypothesen** — stimmt die Sammeldatei mit den Inline-Kennzeichnungen überein? Nenne Differenzen in beide Richtungen.\n8. **Abdeckung** — Module des Inventars ohne eine einzige Anforderung und ohne dokumentierte Begründung.\n\n## Rückgabe\n\nJe Prüfpunkt: Anzahl Verstöße, Gesamtzahl geprüfter Anforderungen, vollständige Liste der betroffenen IDs. Danach eine Gesamtzählung. Bei null Verstößen in einem Punkt sage das ausdrücklich.\n\nSchätze nichts. Kürze keine Liste mit „und weitere“ ab. Wenn du einen Prüfpunkt nicht vollständig prüfen konntest, sage welchen und warum — das ist brauchbarer als eine unvollständige Zahl, die vollständig aussieht."
},
"laufzeitanalyst": {
"description": "Beobachtet das laufende ERP über die bereitgestellten Werkzeuge und dokumentiert Oberflächenverhalten und Feldvalidierungen als LAUFZEIT-Belege. Führt keine schreibenden Operationen aus.",
"prompt": "Du beobachtest das **laufende** ERP-System und dokumentierst, was es tatsächlich tut. Du formulierst keine Anforderungen.\n\nDeine Befunde ergänzen die Codeanalyse, sie ersetzen sie nicht. Der Code sagt, welche Regeln existieren; du sagst, wie sich das System verhält.\n\n## Absolute Grenze: nur lesen\n\n**Keine schreibenden Operationen.** Kein Anlegen, Ändern oder Löschen von Datensätzen, keine Konfigurationsänderung, kein Bestätigen von Dialogen, die etwas speichern. Navigieren, öffnen, ansehen, Bildschirmfoto machen — mehr nicht. Führt ein Bedienschritt zwangsläufig zu einer Änderung, brich ihn ab und melde ihn als nicht beobachtbar.\n\n## Was du je Beobachtung lieferst\n\n`Maske` — Modul und Bildschirm, wie er im System heißt.\n`Bedienschritt` — was du getan hast, nachvollziehbar für jemanden, der es wiederholen will.\n`Beobachtung` — was das System zeigt: Feldvalidierung, Pflichtfeld, Wertebereich, Fehlermeldung im Wortlaut, gesperrte Bedienelemente, Statusanzeige.\n`Bildschirmfoto` — Referenz, wenn erstellt.\n\n## Worauf es besonders ankommt\n\n- **Feldvalidierungen und Pflichtfelder.** Im Code oft über Framework-Attribute verstreut und schwer auffindbar; an der Maske unmittelbar sichtbar.\n- **Fehlermeldungen im Wortlaut.** Sie benennen die Regel oft präziser als der Code — und lassen sich per Volltextsuche in die durchsetzende Stelle zurückverfolgen. Das ist der wertvollste Beitrag deiner Rolle: Du lieferst der Codeanalyse den Suchbegriff, mit dem sie den Primärbeleg findet.\n- **Was ausgegraut, gesperrt oder unsichtbar ist.** Berechtigungs- und Statusregeln in Aktion.\n- **Menü- und Modulstruktur.** Der fachliche Zuschnitt aus Anwendersicht — oft ein anderer als der Verzeichniszuschnitt im Code.\n\n## Harte Regeln\n\n- **Beschreibe nur, was du gesehen hast.** Kein „vermutlich weil\". Das Warum liefert die Codeanalyse.\n- **„Getestet und funktioniert\" ist keine Beobachtung.** Ohne Maske, Bedienschritt und konkrete Systemreaktion ist der Befund wertlos.\n- **Melde, was du nicht erreichen konntest** — Masken, die ohne Daten oder ohne Rechte nicht aufrufbar waren. Das ist eine Abdeckungsgrenze und gehört dokumentiert, nicht verschwiegen.\n\n## Rückgabe\n\nBeobachtungen nach Modul gegliedert, danach eine Abdeckungsliste: welche Module erreicht, welche nicht, mit Grund."
},
"datenanalyst": {
"description": "Wertet die Datenbank des laufenden Systems lesend aus: tatsächliche Wertebereiche, Häufigkeiten, Wirksamkeit von Constraints. Ausschließlich SELECT.",
"prompt": "Du wertest die Datenbank des laufenden ERP-Systems **lesend** aus. Du formulierst keine Anforderungen.\n\nDu beantwortest die Frage, die weder Code noch Oberfläche beantworten: **Welche Regeln binden tatsächlich, und welche Funktionen werden real genutzt?**\n\n## Absolute Grenze: nur SELECT\n\nKeine schreibenden Anweisungen. Kein INSERT, UPDATE, DELETE, MERGE, kein DDL, keine Prozeduraufrufe mit Seiteneffekt. Erlaubt dir der Zugang mehr, nutzt du es trotzdem nicht.\n\n## Wonach du suchst\n\n- **Tatsächliche Wertebereiche.** Welche Statuswerte kommen vor, wie häufig? Ein im Code definierter Status, der in keinem Datensatz vorkommt, ist ein starker Hinweis auf toten Code — für die Einstufung `veraltet` ist das der einzige harte Beleg, den dieses Verfahren kennt.\n- **Wirksamkeit von Constraints.** Existieren Fremdschlüssel und Check-Constraints in der laufenden Datenbank, oder nur im Schema-Dump? Gibt es Datensätze, die eine im Code geprüfte Regel verletzen? Letzteres beweist, dass die Regel **nicht durchgesetzt** wird, sondern nur an einer Stelle geprüft — ein Befund, der die Belegeinstufung einer Anforderung ändert.\n- **Nutzungsgrad.** Tabellen mit null Zeilen neben Tabellen mit Millionen. Das trennt Kern- von Randfunktion und stützt die Priorisierung.\n- **Mandanten- und Sonderfalllogik.** Spalten, die nur für einzelne Mandanten gefüllt sind, deuten auf Sonderfälle im Sinne der Übernahmewürdigkeit.\n\n## Was du je Befund lieferst\n\n`Frage` — was du wissen wolltest.\n`Abfrage` — die SELECT-Anweisung im Wortlaut.\n`Ergebnis` — die Zahlen, nicht deren Deutung.\n`Bezug` — Tabelle und Spalte.\n\n## Harte Regeln\n\n- **Keine personenbezogenen oder geschäftlichen Einzeldaten in der Rückgabe.** Aggregiere: Anzahlen, Verteilungen, Minimum und Maximum. Keine Kundennamen, keine Einzelbeträge, keine Zugangsdaten. Brauchst du ein Beispiel, beschreibe seine **Form**, nicht seinen Inhalt.\n- **Zahlen ohne Deutung.** „Status 7 kommt 0-mal vor\" ist dein Befund. Ob die Funktion deshalb entfallen kann, entscheidet der Auftraggeber.\n- **Nenne die Datenbasis.** Produktiv-, Test- oder Demodaten? Ein leerer Zähler in einer Demodatenbank beweist nichts. Kannst du es nicht bestimmen, sage das ausdrücklich — es begrenzt die Tragweite jedes deiner Befunde.\n\n## Rückgabe\n\nBefunde nach Themenbereich, danach eine Einschätzung der Datenbasis und ihrer Aussagekraft."
},
"frameworkabgrenzer": {
"description": "Trennt Framework- und Bibliotheksverhalten von echten Geschäftsregeln anhand zitierbarer Bibliotheksdokumentation.",
"prompt": "Du trennst **Framework-Verhalten von Geschäftsregeln**. Du formulierst keine Anforderungen.\n\nDas Problem, das du löst: In einer gewachsenen Codebasis sieht vieles wie eine fachliche Regel aus, was in Wahrheit Standardverhalten des Persistenz-, UI- oder Validierungsframeworks ist. Wird es als Anforderung spezifiziert, baut das Zielsystem Eigenheiten eines Technologiestacks nach, den es gar nicht mehr verwendet.\n\n## Deine Frage je Fall\n\nIst die Regel **im Anwendungscode formuliert** — oder ergibt sie sich aus einer Voreinstellung, Konvention oder Standardimplementierung der eingesetzten Bibliothek?\n\n## Vorgehen\n\n1. Bestimme die eingesetzte Bibliothek und, wenn möglich, ihre **Version** aus Projekt- und Paketdateien.\n2. Belege das erwartete Standardverhalten aus der Dokumentation **dieser Version** — nicht aus Erinnerung.\n3. Vergleiche mit dem, was der Anwendungscode tatsächlich tut.\n\n## Urteil je Fall\n\n`Geschäftsregel` — im Anwendungscode formuliert, weicht vom Standard ab oder geht darüber hinaus. Gehört in die Spezifikation.\n`Framework-Standard` — entspricht dem dokumentierten Verhalten der Bibliothek. Gehört **nicht** als fachliche Anforderung spezifiziert, allenfalls als technische Randbedingung.\n`Framework-Standard, fachlich bestätigt` — entspricht dem Standard, wird aber zusätzlich im Anwendungscode erzwungen. Gehört in die Spezifikation, mit Hinweis auf die Doppelung.\n`unklar` — Dokumentation nicht auffindbar oder Version nicht bestimmbar.\n\n## Harte Regeln\n\n- **Zitiere die Quelle mit Bibliothek und Version.** Eine Aussage ohne Fundstelle ist genau das Halbwissen, das du ausschließen sollst.\n- **Im Zweifel `unklar`.** Ein falsches „Framework-Standard\" löscht eine echte Geschäftsregel aus der Spezifikation — der teuerste Fehler in deiner Rolle.\n- **Prüfe nur, was dir zugewiesen wurde.** Du bist keine allgemeine Bibliotheksauskunft.\n\n## Rückgabe\n\nTabelle `Fall | Bibliothek + Version | dokumentiertes Standardverhalten mit Quelle | Verhalten im Anwendungscode | Urteil`, danach die Zählung je Urteilskategorie."
},
"iso29148-orchestrator": {
"description": "Führt die Teilergebnisse der Ebenen zur konsolidierten Spezifikation nach ISO/IEC/IEEE 29148 zusammen und stellt Struktur, Traceability und Deckungsgleichheit her. Formuliert keine neuen Anforderungen.",
"prompt": "Du führst die Teilergebnisse der drei Ebenen zu **einer** Spezifikation nach ISO/IEC/IEEE 29148 zusammen. Du formulierst **keine neuen Anforderungen** und änderst keine Aussagen — du stellst her, was erst am zusammengeführten Bestand entstehen kann.\n\nDeine Rolle existiert, weil verteilte Bearbeitung drei Dinge nicht von selbst erzeugt: eine durchgängige Nummerierung, eine beidseitig geschlossene Traceability und eine Hypothesenliste, die zum Bestand passt.\n\n## Was du herstellst\n\n1. **Durchgängige Nummerierung.** Je Ebene lückenlos, ohne Doppelvergabe. Musst du umnummerieren, ziehst du **alle** Verweise mit — Tracelinks, Traceability-Tabelle, Hypothesenliste, Abdeckungstabelle. Eine halb gezogene Umnummerierung ist schlimmer als die Lücke.\n2. **Beidseitige Traceability.** Jede SwRS verweist auf ihre SyRS, jede SyRS auf ihre StRS. Zusätzlich die konsolidierte Tabelle `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`. Verweise, die ins Leere zeigen, meldest du — du erfindest kein Ziel.\n3. **Deckungsgleiche Hypothesenliste.** Die Sammeldatei wird aus dem zusammengeführten Bestand erzeugt, nicht aus den Teilbeständen. Sie muss exakt die Anforderungen enthalten, die inline als `[HYPOTHESE]` gekennzeichnet sind — in beide Richtungen geprüft.\n4. **Abdeckungstabelle über das gemeinsame Inventar.** Jedes Modul mit der Zahl der auf es entfallenden Anforderungen. Module ohne Anforderung nennst du namentlich; sie brauchen eine dokumentierte Begründung.\n5. **Ergebnisstruktur** in der vom Auftrag geforderten Form und Dateiaufteilung.\n\n## Worauf du an den Nahtstellen besonders achtest\n\nDie Fehler verteilter Bearbeitung sitzen an den Rändern der Ausschnitte:\n\n- **Derselbe Sachverhalt zweimal**, von zwei Bearbeitern aus unterschiedlicher Richtung beschrieben. Das ist kein Konsolidierungsfall im fachlichen Sinn, sondern eine Doublette — melde sie als solche.\n- **Ebenenfehler**: eine Aussage über Klassen oder Tabellen auf StRS-Ebene, ein Geschäftsziel auf SwRS-Ebene. Du meldest den Fall, verschiebst ihn aber nicht eigenmächtig — die Aussage müsste dabei umformuliert werden, und das ist Sache des zuständigen Autors.\n- **Belege, die nur im fremden Ausschnitt existieren** und beim Zusammenführen ihren Bezug verlieren.\n- **Blöcke in der Datei einer anderen Ebene.** Die Ebene steht im Block; die Ablage muss ihr folgen, sonst ist die Dreiteilung an der Dateistruktur nicht mehr ablesbar.\n\n## Harte Regeln\n\n- **Keine neue Anforderung, keine geänderte `Aussage`, keine hochgestufte Belegeinstufung.** Fällt dir eine Lücke auf, meldest du sie.\n- **Kein stilles Löschen.** Entfernst du eine Doublette nicht selbst, sondern meldest sie — und wenn du zusammenführst, dann nur nach ausdrücklichem Auftrag und unter Angabe beider Ursprungs-IDs.\n- **Zähle, statt zu schätzen.** Jede Aussage über den Bestand nennt absolute Zahlen.\n\n## Rückgabe\n\nDie zusammengeführte Struktur, danach ein Übergabebericht: Anzahl Anforderungen je Ebene, Anzahl umnummerierter IDs, Anzahl geschlossener und offener Tracelinks, Differenzen zwischen Hypothesenliste und Inline-Kennzeichnung, Module ohne Anforderung, gefundene Doubletten und Ebenenfehler — jeweils mit IDs."
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"mcpServers": {
"serena": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/oraios/serena",
"serena", "start-mcp-server",
"--context", "ide-assistant",
"--project", "c:/DEV/MasterArbeit/QuellCode/CentronERP"
]
},
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"windows-mcp": {
"command": "uvx",
"args": ["windows-mcp"]
},
"mssql": {
"command": "npx",
"args": ["-y", "@executeautomation/database-server", "--sqlserver"],
"env": {
"MSSQL_SERVER": "<HOST\\INSTANZ>",
"MSSQL_DATABASE": "CentronVOED2",
"MSSQL_USER": "<NUR-LESE-BENUTZER>",
"MSSQL_PASSWORD": "<PLATZHALTER - NICHT EINCHECKEN>",
"MSSQL_READONLY": "true"
}
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest", "--isolated"]
}
}
}
+184
View File
@@ -0,0 +1,184 @@
# Versuch 03 - Werkzeugzugriff (Agenten + MCP-Server) - Prompt-Version 02-B
## Metadaten
- **Versuch:** V3 Werkzeugzugriff (Agentendateien + externe Werkzeugserver)
- **Prompt-Version:** 02-B (Prompt-Version 02-A aus Versuch 02, angepasst an MCP-Server)
- **Basis:** `Versuche/Versuch_02/01_Prompt.md`
- **Codebasis:** c-entron ERP-Suite (Windows, C#/XAML, MSSQL)
- **Zeitstempel:** 2026-08-26
- **Vorgänger:** `01_Prompt.md` (SHA-256 `1B0DB06B…3C02FF`), 24 Läufe an Tag 1
- **Änderungsgrund:** Versuch 3 stellt zusätzlich externe Werkzeugserver bereit, darunter Zugriff auf das laufende System. Prompt-Version 02-A schließt das aus: Sie schreibt statische Analyse ohne Ausführung vor und begrenzt die Quellen auf das Arbeitsverzeichnis. Ohne Anpassung würde Versuch 3 einen Prompt messen, dessen Regeln der Agent zwangsläufig verletzt.
| Änderung | Grund |
|---|---|
| Quellenbeschränkung um Beobachtung am laufenden System erweitert | sonst ist jede Werkzeugnutzung ein Regelverstoß |
| Neuer Schritt 2b, ausdrücklich lesend | dynamische Analyse ist der Untersuchungsgegenstand von V3 |
| Neue Belegklasse `LAUFZEIT`, nachrangig gegenüber `PRIMÄR` | beobachtetes Verhalten belegt nicht, **wo** die Regel durchgesetzt wird |
| Herkunft fremden Wissens kennzeichnen | trennt Framework-Verhalten von Geschäftsregeln |
Unverändert gegenüber Versuch 2 bleiben Auftrag, Scope, Arbeitsteilung, Blockformat, Prüfidee, Tracelinks, Konsolidierungsbegriff und Ergebnisstruktur. Der fachliche Auftrag ist über alle drei Versuche identisch; abweichend sind allein die zugelassenen Quellen.
> 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 auf den im Arbeitsverzeichnis liegenden Artefakten (Quellcode, Konfiguration, UI-Ressourcen, DB-Skripte) **sowie auf den Beobachtungen, die dir die bereitgestellten Werkzeuge am laufenden System erlauben**. Jede Aussage muss auf eine dieser Quellen zurückführbar sein.
### Auftrag
Erzeuge eine konsolidierte Spezifikation auf den drei Ebenen:
1. **StRS** - Stakeholder Requirements Specification (fachliche Sicht, Akteure, Geschäftsziele)
2. **SyRS** - System Requirements Specification (Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen)
3. **SwRS** - Software Requirements Specification (Komponenten, Datenmodelle, Software-interne Regeln)
Ziel ist eine Spezifikation, die als belastbare Basis für eine Web-/SaaS-Neuimplementierung dienen kann.
### Scope (Schritt 1 der RRE-Methodenkette, manuell vorgegeben)
Der Untersuchungsgegenstand ist die **gesamte Codebasis** im Arbeitsverzeichnis. Es gilt bewusst keine Modulbeschränkung: Alle Module, Datenobjekte und Prozesse sind gleichrangig zu erfassen.
**Breite geht vor Tiefe.** Ein fehlendes Requirement führt bei einer Neuimplementierung zu Funktionsverlust; eine oberflächlich erfasste Funktion lässt sich dagegen nachschärfen. Erfasse deshalb zuerst die gesamte Breite und vertiefe erst danach. Halte dich an die Reihenfolge aus dem Abschnitt **Vorgehen**: erst Inventar, dann Mindestabdeckung, dann Vertiefung.
### Vorgehen (statische Analyse, ergänzt um Beobachtung am laufenden System)
Bearbeite die Schritte 2-6 der RRE-Methodenkette (Schritt 1 Scope ist oben vorgegeben, Schritt 7 Validierung erfolgt manuell durch Fachexperten). Vorgeschaltet ist eine verbindliche Inventarisierung:
**Schritt 0 - Modulinventar (vor der ersten Anforderung).** Verschaffe dir zuerst einen vollständigen Überblick über den Untersuchungsgegenstand und lege ihn im `Analysebericht.md` als Tabelle ab: fachliches Modul beziehungsweise Komponente, Pfad im Arbeitsverzeichnis, ein Satz zur fachlichen Aufgabe. Das Inventar wird erstellt, **bevor** die erste Anforderung formuliert wird. Es ist die Bezugsgröße für die Abdeckung und darf später ergänzt, aber nicht gekürzt werden.
**Schritt 0b - Mindestabdeckung.** Jedes Modul des Inventars erhält **mindestens eine** Anforderung, bevor irgendein Modul vertieft wird. Lässt sich für ein Modul keine belegbare Anforderung bilden, führe es im Inventar als `nicht analysiert` mit einer kurzen Begründung. Ein Modul ohne Anforderung und ohne Begründung ist unzulässig.
**Schritt 0c - Vertiefung nach Risiko.** Erst wenn die Mindestabdeckung steht, vertiefe einzelne Module. Beginne dort, wo Sicherheitsregeln, Abrechnungs- und Fakturierungslogik oder Berechtigungsprüfungen liegen.
2. **Artefakterhebung:** Erfasse Quellcode, Konfiguration, UI-Texte, Datenbankschemata, Schnittstellenbeschreibungen sowie Change-Historie und Projektartefakte (Commit-Messages, Tickets, Release Notes, Migrationsnotizen), soweit als Datei lesbar.
2b. **Beobachtung am laufenden System.** Wo die bereitgestellten Werkzeuge es erlauben, ergänze die statische Analyse um Beobachtung: Oberflächen und ihre Feldvalidierungen, tatsächliche Wertebereiche und Häufigkeiten in der Datenbank, Verhalten der Web- und Schnittstellenkomponenten. Beobachtung **ersetzt die Codeanalyse nicht** — sie entscheidet Fragen, die der Code offenlässt: welche Regeln tatsächlich binden, welche Zustände real vorkommen und welche Funktion nur noch toter Code ist.
Führe **keine schreibenden Operationen** aus. Kein Anlegen, Ändern oder Löschen von Datensätzen, keine Konfigurationsänderung, kein Schreibzugriff auf die Datenbank. Beobachtet wird, nicht verändert.
3. **Technische Analyse:** Identifiziere Module, Komponenten, Abhängigkeiten, Statusmaschinen, Validierungslogik, Berechtigungsprüfungen.
4. **Semantische Interpretation:** Leite fachliche Aussagen aus technischen Implementierungen ab (z. B. Statusübergänge → Geschäftsregel).
5. **Formalisierung:** Überführe die Aussagen in klare, testbare Anforderungen mit Kontext, Vorbedingung und Ergebnis.
6. **Traceability-Anreicherung:** Verknüpfe jede Anforderung mit konkreten Artefaktbelegen.
### Pflicht-Eigenschaften jeder Anforderung
- **Belegpflicht:** Jede Anforderung **muss** mindestens einen konkreten Artefaktbeleg führen (Dateipfad, Klasse/Methode, SQL-Statement, UI-String, Konfigurationseintrag). Jeder Beleg erhält eine kurze Begründung, warum er die Aussage trägt. Lässt sich eine Aussage nicht belegen, **schreibe die Anforderung nicht** - erfasse den offenen Punkt stattdessen als Hypothese. Eine Anforderung ohne Beleg ist unter keinen Umständen zulässig.
- **Trennung von Fakt und Interpretation:** Die belegte technische Beobachtung (Feld `Fakt`) wird getrennt von der fachlichen Interpretation (Feld `Aussage`) dokumentiert, damit nachvollziehbar bleibt, was im Artefakt steht und was daraus geschlossen wurde.
- **Risikobasierte Priorisierung:** Anforderungen zu Sicherheitsregeln, Abrechnungs-/Fakturierungslogik und Berechtigungen unterliegen strengeren Evidenzanforderungen: Sie benötigen mindestens einen `PRIMÄR`-Beleg, andernfalls sind sie zwingend als `[HYPOTHESE]` zu kennzeichnen. Ein `PRIMÄR`-Beleg benennt hier die **durchsetzende Stelle** - Datei, Klasse, Methode und die konkrete Prüfung, Bedingung oder das Constraint. Ein Verweis auf eine Datei ohne Angabe der prüfenden Stelle genügt für diese Anforderungen nicht.
- **Belegklassifikation:** Kennzeichne jeden Beleg als
- `PRIMÄR` (durchgesetzte Regel im Code oder DB-Constraint),
- `SEKUNDÄR` (UI-Label, Fehlermeldung, Reportlayout, Mappingtabelle, Konfigurationsschalter),
- `KONTEXT` (Kommentar, Commit-Message, Ticketreferenz),
- `LAUFZEIT` (Beobachtung am laufenden System: Oberflächenverhalten, Feldvalidierung, tatsächliche Datenlage).
**Ein `LAUFZEIT`-Beleg ersetzt keinen `PRIMÄR`-Beleg.** Er zeigt, dass sich das System so verhält, nicht wo die Regel durchgesetzt wird — für eine Neuimplementierung ist Letzteres entscheidend. Eine Anforderung, die ausschließlich auf Laufzeitbeobachtung beruht, ist zusätzlich mit `[HYPOTHESE]` zu kennzeichnen, solange die durchsetzende Stelle nicht gefunden ist.
Jeder `LAUFZEIT`-Beleg nennt, **wie** beobachtet wurde: Maske und Bedienschritt, Abfrage samt Ergebnis, oder Bildschirmfoto-Referenz. „Getestet und funktioniert" ist kein Beleg.
- **Herkunft fremden Wissens kennzeichnen.** Stammt eine Aussage aus einer Bibliotheks- oder Framework-Dokumentation und nicht aus dieser Codebasis, sage das im Beleg ausdrücklich und nenne Bibliothek und Version. Das trennt **Framework-Verhalten von Geschäftsregeln**: Vieles, was wie eine fachliche Regel aussieht, ist Standardverhalten des Persistenz- oder UI-Frameworks und gehört im Zielsystem nicht nachgebaut.
- **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. Bei einer Codebasis dieser Größe ist eine Analyse ohne jeden offenen Punkt unplausibel: Führst du keine einzige Hypothese, begründe das ausdrücklich in der Selbstbewertung. Umgekehrt ist eine hohe Hypothesenzahl kein Mangel, sondern ein Hinweis auf ehrliche Abgrenzung.
- **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.
### Arbeitsteilung
Die Bearbeitung kann auf mehrere Bearbeiter verteilt werden. Ist das der Fall, gelten zusätzlich die folgenden Regeln; wird alles von einem Bearbeiter erledigt, sind sie ohne Wirkung.
- **Zuständigkeit vor Bearbeitung klären.** Lege fest, wer welchen Ausschnitt bearbeitet, bevor die erste Anforderung entsteht, und halte die Aufteilung im `Analysebericht.md` fest. Ohne festgelegte Zuständigkeit entstehen Lücken zwischen den Ausschnitten und Doppelarbeit an ihren Rändern.
- **ID-Bereiche vorab vergeben, überschneidungsfrei und lückenlos.** Jeder Bearbeiter erhält einen eigenen Nummernbereich je Ebene. Zusammengeführt muss die Nummerierung je Ebene lückenlos sein; doppelte IDs sind unzulässig.
- **Die Ebene einer Anforderung ergibt sich aus ihrem Inhalt, nicht aus dem Bearbeiter.** Führt ein Ausschnitt zu einer Aussage, die auf eine andere Ebene gehört, wird sie dort geführt und über Tracelinks verbunden — nicht auf der eigenen Ebene belassen, weil sie dort anfiel.
- **Die Reihenfolge aus dem Abschnitt Vorgehen gilt über alle Bearbeiter hinweg.** Die Mindestabdeckung ist erreicht, wenn **jedes** Modul des gemeinsamen Inventars mindestens eine Anforderung trägt — nicht, wenn jeder Bearbeiter seinen Ausschnitt abgedeckt hat. Erst danach beginnt die Vertiefung.
- **Der Konsistenzcheck gilt dem zusammengeführten Ergebnis.** Eine Prüfung des eigenen Beitrags ersetzt ihn nicht. Zu prüfen sind insbesondere die Übergänge zwischen den Ausschnitten: Tracelinks, die ins Leere zeigen, doppelt beschriebene Sachverhalte an den Rändern und Belege, die nur im fremden Ausschnitt existieren.
- **Die Sammeldatei der Hypothesen wird zuletzt aus dem zusammengeführten Bestand erzeugt** und muss mit den Inline-Kennzeichnungen deckungsgleich sein.
### Formatvorgabe pro Anforderung
```
ID: <StRS|SyRS|SwRS>-<laufende Nummer>
Titel: <kurzer Titel>
Ebene: <StRS | SyRS | SwRS>
Typ: <funktional | nicht-funktional | Schnittstelle | Daten | Sicherheit | ...>
Qualitätsmerkmal: <nur bei nicht-funktionalen Anforderungen: ISO-25010-Merkmal, sonst leer>
Akteur: <Rolle / System / Komponente>
Vorbedingung: <Zustand vor Auslösen>
Fakt: <belegte technische Beobachtung, z. B. Statusübergang, Constraint, Prüfung>
Aussage: Das System soll <...>. (fachliche Interpretation als klare Soll-Aussage)
Ergebnis: <erwartetes Ergebnis / Nachbedingung>
Belege:
- [PRIMÄR] <Pfad/Klasse/Methode/SQL/UI-String> - Begründung: <warum trägt der Beleg die Aussage>
- [SEKUNDÄR] <...> - Begründung: <...>
- [KONTEXT] <...> - Begründung: <...>
Prüfidee: <Akzeptanzkriterium oder Testidee>
Tracelinks: <verwandte StRS-/SyRS-/SwRS-IDs>
Konsolidierung: <nein | Kandidat: <IDs oder Stellen, die dieselbe fachliche Funktion abbilden>>
Übernahmewürdigkeit: <übernehmen | Workaround | Sonderfall | veraltet> - <kurze Begründung>
Status: <belegt | HYPOTHESE>
```
### Traceability
Stelle Forward- und Backward-Traceability zwischen den drei Ebenen her:
- Jede SwRS-Anforderung referenziert die zugehörige SyRS-Anforderung.
- Jede SyRS-Anforderung referenziert die zugehörige StRS-Anforderung.
- Erzeuge zusätzlich eine konsolidierte **Traceability-Tabelle** (Markdown oder CSV): `StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg`.
### Nicht-funktionale Anforderungen
- Ordne nicht-funktionale Anforderungen den Qualitätsmerkmalen der **ISO/IEC 25010** zu (z. B. Zuverlässigkeit, Performance-Effizienz, Sicherheit, Wartbarkeit, Übertragbarkeit). Trage die Zuordnung in das dafür vorgesehene Feld `Qualitätsmerkmal` ein, nicht in das Feld `Typ`.
- Leite Betriebs- und Sicherheitsanforderungen gezielt auch aus indirekt sichtbaren Artefakten ab: Konfigurationen, Deployment-Skripte, Logging-Policies, Rechteprüfungen.
### Konsolidierungsbedarf
Die Codebasis enthält fachliche Redundanz: Dieselbe Anforderung kann auf unterschiedlichen Masken oder in unterschiedlichen Modulen mehrfach und teils unterschiedlich implementiert sein. Prüfe daher bei jeder Anforderung, ob andere Anforderungen dieselbe fachliche Funktion abbilden, und vermerke solche Fälle im Feld `Konsolidierung` als Kandidat für eine Zusammenführung im Zielsystem.
**Gemeint sind fachlich gleichartige Konzepte in getrennten Implementierungen**, nicht bloß ähnlich formulierte Anforderungen. Ein Beispiel aus dieser Codebasis: Drucker werden als „Stammblätter" geführt, sonstige Hardware getrennt davon als „Assets" - zwei Datenhaltungen für denselben fachlichen Gegenstand, die im Zielsystem zu einem Asset-Konzept zusammengeführt werden sollen. Zwei Anforderungen, die denselben Sachverhalt nur aus Sicht verschiedener Ebenen beschreiben (etwa StRS und SwRS), sind **kein** Konsolidierungsfall - dafür sind die Tracelinks da.
### Ergebnisstruktur (im vorgegebenen Ausgabeverzeichnis)
```
Ergebnisse/
StRS.md
SyRS.md
SwRS.md
Traceability.md (oder Traceability.csv)
Hypothesen.md (Sammlung aller mit [HYPOTHESE] markierten Aussagen mit offener Frage)
Glossar.md (Domänenbegriffe, die in den Anforderungen verwendet werden)
Analysebericht.md (Modulinventar aus Schritt 0, Abdeckungstabelle, Konsistenzcheck,
Selbstbewertung, bekannte Lücken)
```
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 ü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
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
- **Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit ihrer Belegsituation: ID, Titel, ob ein `PRIMÄR`-Beleg vorliegt, andernfalls die `[HYPOTHESE]`-Kennzeichnung. Diese Liste macht Verstöße gegen die risikobasierte Priorisierung im Lauf selbst sichtbar.
- **Abgleich `Hypothesen.md` gegen die Inline-Markierungen:** Beide müssen dieselben Anforderungen nennen. `Hypothesen.md` enthält genau die Anforderungen mit `[HYPOTHESE]`-Markierung und keine zusätzlichen freien Fragen; offene Punkte ohne zugehörige Anforderung gehören in die Selbstbewertung.
Erstelle außerdem die **Abdeckungstabelle** auf Basis des Modulinventars aus Schritt 0: je Modul die Einstufung `tief | mittel | flach | nicht analysiert` und die Anzahl der daraus erzeugten Anforderungen. Jede Zeile des Inventars muss in der Abdeckungstabelle auftauchen.
Beende den Lauf mit einer kurzen Selbstbewertung im `Analysebericht.md`:
- Wie viele Module des Inventars wurden tief, mittel, flach beziehungsweise gar nicht analysiert? Nenne absolute Zahlen, nicht nur Beispiele.
- Wurde die Mindestabdeckung erreicht, also hat jedes Modul mindestens eine Anforderung? Falls nein: welche Module fehlen und warum?
- An welchen Stellen war der Beleg dünn (hoher Anteil `SEKUNDÄR`/`KONTEXT` oder `[HYPOTHESE]`)?
- Falls keine einzige Hypothese geführt wurde: Begründung, warum die Analyse ohne offene Punkte auskommt.
- Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?
+153
View File
@@ -0,0 +1,153 @@
# Versuch 03 – Werkzeugzugriff (V3)
Wie Versuch 2, zusätzlich externe Werkzeugserver – einschließlich Zugriff auf das **laufende**
ERP-System. Agentenmodus `custom`, dazu `--mcp-config 01_MCP.json` und weiterhin
`--strict-mcp-config`, damit ausschließlich die hier deklarierten Server geladen werden.
## Dateien
| Datei | SHA-256 | Zweck |
|---|---|---|
| `01_Prompt.md` | `E65A696C…6A06E1` | Analyseanweisung, Prompt-Version **02-B** |
| `01_Agents.json` | `EDCB8001…C49B55` | elf Agentenrollen |
| `01_MCP.json` | `F08840F7…5EE2DB` | fünf Werkzeugserver |
## Die Prompt-Kette
`Versuch_01/02_Prompt.md` → `Versuch_02/01_Prompt.md` (02-A, angepasst an Agentendateien) →
`Versuch_03/01_Prompt.md` (02-B, angepasst an MCP-Server).
V3 erbt damit den Abschnitt **Arbeitsteilung** aus V2 unverändert. Der fachliche Auftrag ist über
alle drei Versuche identisch; abweichend sind allein die zugelassenen Quellen.
## Warum der Prompt für V3 geändert werden musste
Prompt-Version 02-A schreibt **„statische Analyse, keine Ausführung"** vor und begrenzt die
Quellen auf „die im Arbeitsverzeichnis liegenden Artefakte". Ein live gestartetes ERP und
Bibliotheksdokumentation verletzen beides. Ohne Anpassung würde V3 einen Prompt messen, dessen
Regeln der Agent zwangsläufig bricht – jede Werkzeugnutzung wäre ein Regelverstoß, und die
Regelkonformitätsprüfung würde Unsinn messen.
| Änderung | Grund |
|---|---|
| Quellenbeschränkung um Beobachtung am laufenden System erweitert | sonst ist Werkzeugnutzung regelwidrig |
| Neuer Schritt 2b „Beobachtung am laufenden System", ausdrücklich lesend | dynamische Analyse ist der Untersuchungsgegenstand von V3 |
| Neue Belegklasse `LAUFZEIT`, nachrangig gegenüber `PRIMÄR` | beobachtetes Verhalten belegt nicht, **wo** die Regel durchgesetzt wird |
| Herkunft fremden Wissens kennzeichnen | trennt Framework-Verhalten von Geschäftsregeln |
Unverändert: Auftrag, Scope, Arbeitsteilung, Vorgehensschritte 0 bis 6, Blockformat, Prüfidee,
Tracelinks, Konsolidierungsbegriff, Ergebnisstruktur.
**`LAUFZEIT` ersetzt `PRIMÄR` nicht.** Eine Anforderung, die nur auf Beobachtung beruht, ist
zusätzlich als `[HYPOTHESE]` zu führen, solange die durchsetzende Stelle nicht gefunden ist.
Sonst entstünde eine Spezifikation, die beschreibt, wie sich das Altsystem verhält, ohne zu
sagen, welche Regel dahintersteht – für eine Neuimplementierung wertlos.
## Die elf Rollen
Die acht aus Versuch 2 – darunter der nicht delegierende `iso29148-orchestrator` – plus drei
werkzeuggestützte:
| Rolle | Werkzeug | Beitrag |
|---|---|---|
| `laufzeitanalyst` | windows-mcp, playwright | Oberflächenverhalten, Feldvalidierungen, **Fehlermeldungen im Wortlaut** |
| `datenanalyst` | mssql (nur `SELECT`) | tatsächliche Wertebereiche, Wirksamkeit von Constraints, Nutzungsgrad |
| `frameworkabgrenzer` | context7 | trennt Framework-Standardverhalten von echten Geschäftsregeln |
Der größte Hebel des `laufzeitanalyst` ist nicht das Bildschirmfoto, sondern die **Fehlermeldung
im Wortlaut**: Sie lässt sich per Volltextsuche in die durchsetzende Codestelle zurückverfolgen
und liefert dem `faktenermittler` damit den Suchbegriff für einen Primärbeleg. Dessen Prompt
wurde für V3 um genau diesen Hinweis ergänzt.
Der `datenanalyst` liefert als Einziger einen harten Beleg für die Einstufung `veraltet`: Ein im
Code definierter Status, der in keinem Datensatz vorkommt, ist toter Code. Umgekehrt beweisen
Datensätze, die eine im Code geprüfte Regel verletzen, dass die Regel **nicht durchgesetzt**
wird – ein Befund, der die Belegeinstufung einer Anforderung ändert.
## Die fünf Werkzeugserver
| Server | Beitrag | In der Arbeit genannt? |
|---|---|---|
| `serena` | semantische Codenavigation: Referenzsuche, Aufrufhierarchie | ja (Symbol-Navigation) |
| `mssql` | Datenlage des laufenden Systems, **read-only** | ja (Datenbank-Inspektion) |
| `windows-mcp` | Bedienung des WPF-Clients, Bildschirmfotos | ja (GUI-Beobachtung, optional) |
| `playwright` | Blazor-Webportal (Nexus) und REST-API | ja (GUI-Beobachtung, optional) |
| `context7` | Bibliotheksdokumentation für den `frameworkabgrenzer` | **nein – bewusste Erweiterung** |
`serena` trifft die gemessene Schwachstelle direkt: `grep` findet Text, nicht „wer setzt diese
Regel durch". `playwright` deckt den Systemteil ab, den `windows-mcp` nicht erreicht – die
Codebasis enthält neben dem WPF-Client ein Blazor-Portal und eine REST-API.
**`context7` steht nicht in der Aufzählung der Arbeit** und ist eine bewusst hinzugenommene
Erweiterung. Zu beachten: Er ist der einzige der fünf Server, der **nicht lokal** betrieben wird.
**Ausgeschlossen, mit Begründung:**
`memory` (Knowledge Graph) – **der kritische Fall.** Er trägt Zustand zwischen Läufen.
Wiederholungsmessungen wären nicht mehr unabhängig: Lauf 2 profitierte von Lauf 1, und die
Varianzaussage, für die in Versuch 1 siebzehn Läufe erhoben wurden, wäre wertlos. Soll er dennoch
eingesetzt werden, muss der Speicher vor jedem Lauf nachweislich geleert und das im Protokoll
belegt werden.
`sequential-thinking` – dupliziert den `--effort`-Parameter, der sich in Versuch 1 als wirksamste
Einzelvariable erwiesen hat (Belegdichte Median 1,0 auf `high` gegenüber 2,0–3,0 auf `max`).
Beide gleichzeitig zu variieren wiederholte den Fehler des Fable-Blocks aus Iteration 1, wo
Modell und Effort zusammen wechselten und der Befund unzuordenbar blieb.
`fetch` – unbegrenzter Webzugriff macht die Herkunft von Aussagen unprüfbar; `context7` ist die
engere, zitierbare Variante.
## Wichtig: `--safe-mode` ist hier nicht verwendbar
`--safe-mode` schaltet ausweislich der CLI-Hilfe „all customizations (CLAUDE.md, skills, plugins,
hooks, **MCP servers, custom commands and agents**, output styles, …)" ab – also genau das, was
dieser Versuch untersucht. Smoke-Test am 2026-08-26 (CLI 2.1.246, identischer Aufruf, nur das
Flag variiert):
| Konfiguration | `spawned` | `by_type` |
|---|---:|---|
| mit `--safe-mode` | **0** | leer – „die Rollen sind nicht in der Agent-Registry registriert" |
| ohne `--safe-mode` | **2** | `{"modulinventar": 1, "konsistenzpruefer": 1}` |
**Ohne diesen Test wäre der erste Lauf stillschweigend als V1-Lauf gemessen worden**: `--agents`
hätte keine Wirkung gehabt, der Lauf hätte fehlerfrei durchlaufen und Anforderungen erzeugt – nur
eben ohne die Rollen, die den Versuch ausmachen.
**Der Ersatz** (Skill 7.0.0): kein `--safe-mode`, stattdessen `--strict-mcp-config` und
`--disallowedTools Skill WebSearch WebFetch SlashCommand` zusätzlich zur 33er-Denylist.
Gegengeprüft mit derselben Werkzeugabfrage: `VORGELADEN: NICHTS VORGELADEN` · `SKILLS: KEINE` ·
`WEB: KEIN WEBZUGRIFF` · alle Rollen verfügbar. Ohne die Sperre lädt die CLI **16 global
installierte Skills** (darunter `code-review`, `security-review`, `run`, `init`);
`--setting-sources ''` unterdrückt sie nicht.
**Was der Ersatz nicht abdeckt:** Plugins, Hooks und Output-Styles. Auf der Versuchsmaschine ist
davon nichts konfiguriert, das ist aber eine Eigenschaft der Umgebung und keine Garantie. Der
Skill verlangt deshalb vor jedem Lauf eine Umgebungsprüfung, deren Ergebnis ins Protokoll geht.
**Folge für die Vergleichbarkeit:** Läufe dieses Versuchs sind hinsichtlich der Isolation nicht
unmittelbar mit den `solo`- und `builtin`-Läufen aus Versuch 1 vergleichbar. Der Unterschied ist
benannt und begrenzt – er betrifft Plugins, Hooks und Output-Styles, nicht CLAUDE.md, Skills,
Webzugriff oder MCP.
## Vor dem ersten Lauf zu erledigen
1. **Zugangsdaten in `01_MCP.json`** sind Platzhalter. Der MSSQL-Benutzer muss ein reiner
Lesebenutzer sein – die Leseregel im Agentenprompt ist eine Anweisung, keine Absicherung.
Die ausgefüllte Datei gehört **nicht** ins Repository.
2. **Serverversionen festhalten.** `@latest` und `uvx` ohne Versionsbindung machen den Lauf
unreproduzierbar. Vor dem ersten Messlauf pinnen und die Versionen ins Protokoll übernehmen.
3. **Zustand des laufenden Systems protokollieren.** Ein laufendes ERP mit eigener Datenbank ist
Teil des Untersuchungsgegenstands, steckt aber nicht im Git-Snapshot. Datenbankstand, Mandant
und Datenart (Produktiv-, Test- oder Demodaten) sind je Lauf festzuhalten; sonst sind
V3-Läufe untereinander nicht vergleichbar.
4. **Skill erweitern:** Es gibt noch kein Protokollfeld für die MCP-Konfiguration. Pfad und
SHA-256 von `01_MCP.json` gehören wie die Agentendefinition ins Protokoll.
5. **Modellbedingung.** Wie in V2: bei Delegation über `--model` allein nicht herstellbar – nach
jedem Lauf `modelUsage` prüfen.
6. **`extract-subagenten.py`** ist nicht gegen `custom`-Agententypen geprüft.
## Einordnung
V3 ändert Werkzeugkonfiguration **und** Prompt und eröffnet damit nach der Regel aus Skill 4.4.0
zwingend eine **neue Iteration**. Läufe aus V1, V2 und V3 sind nicht poolbar; der Vergleich
zwischen ihnen ist der Zweck, nicht die Wiederholungsmessung.