Lots of runs
This commit is contained in:
+447
@@ -0,0 +1,447 @@
|
||||
# Analysebericht — c-entron ERP-Suite
|
||||
|
||||
Iteration 02 (Prompt-Baseline, überarbeitet). Dieser Bericht enthält das verbindliche Modulinventar
|
||||
(Schritt 0), die Abdeckungstabelle, den Konsistenzcheck und die Selbstbewertung. Er wird während des
|
||||
Laufs fortlaufend ergänzt; die Abdeckungstabelle, der Konsistenzcheck und die Selbstbewertung werden
|
||||
erst am Ende ausgefüllt.
|
||||
|
||||
## Hinweis zur Granularität des Inventars
|
||||
|
||||
Der Vorgänger-Prompt (Iteration 01) führte zu einem Inventar von rund 85 Einträgen, das je nach Lauf
|
||||
zwischen 42 und 325 Anforderungen und einer sehr ungleichmäßigen Abdeckung nach sich zog. Für diese
|
||||
Iteration wurde das Inventar bewusst auf der Ebene **fachlicher Teilbereiche** gebildet: Ein Eintrag
|
||||
entspricht in der Regel einem WPF-UI-Modul, einem klar abgrenzbaren Unterbereich eines großen Moduls
|
||||
(z. B. `Finances/Dunning`, `Administration/RightsManagement`) oder einer eigenständigen Backend-Domäne
|
||||
ohne UI-Gegenstück (z. B. `Centron.BL/RiverDivo`). Rein technische Unterordner (z. B. `ViewModels`,
|
||||
`Views`, `Properties`, `bin`, `obj`) wurden nicht als eigene Zeilen geführt, ebenso wurden mehrere sehr
|
||||
kleine, thematisch zusammengehörige Ordner zu einer Zeile zusammengefasst (z. B. Administration-Cache/
|
||||
Connections/Settings zu „Systemkonfigurations-DB & technische Einstellungen"). Das Ergebnis sind 120
|
||||
Inventarzeilen, jede mit Pfadangabe(n) und mindestens einem Satz zur fachlichen Aufgabe. Diese Zahl ist
|
||||
höher als in Iteration 01, weil sie **vor** jeder Vertiefung feststeht und nicht nachträglich an die
|
||||
tatsächlich erreichte Abdeckung angepasst wurde.
|
||||
|
||||
## Modulinventar (Schritt 0)
|
||||
|
||||
Spalte „Risiko" markiert Module mit Sicherheits-, Abrechnungs-/Fakturierungs- oder Berechtigungsbezug
|
||||
(strengere Evidenzanforderungen gemäß Auftrag).
|
||||
|
||||
| ID | Modul / Komponente | Pfad(e) im Arbeitsverzeichnis | Fachliche Aufgabe | Risiko |
|
||||
|----|---|---|---|---|
|
||||
| M001 | Angebots- und Auftragsverwaltung | `src/centron/Centron.WPF.UI/Modules/Sales`, `src/backend/Centron.BL/Sales` | Erfassung, Kalkulation und Verwaltung von Angeboten und Aufträgen im Vertrieb. | |
|
||||
| M002 | Produktmatrix-Konfigurator | `.../Modules/Sales/ProductMatrix`, `Centron.BL/ProductMatrix` | Regelbasierte Konfiguration von Produktvarianten/-kombinationen für den Verkauf. | |
|
||||
| M003 | Vertriebs-Serienmail | `.../Modules/Sales/Mailing`, `Centron.BL/Mailings` | Versand von Massen-E-Mails an Kunden/Interessenten aus dem Vertriebskontext. | |
|
||||
| M004 | Sonderartikel-Import | `.../Modules/Sales/SpecialArticleImport`, `SpecialArticleToContractImport` | Import kundenspezifischer Sonderartikel und deren Übernahme in Verträge. | |
|
||||
| M005 | Marketingkampagnen | `.../Modules/Finances/Campaigns` | Planung und Auswertung von Vertriebs-/Marketingkampagnen. | |
|
||||
| M006 | Kundenbeziehungsmanagement (CRM) | `.../Modules/Finances/Crm` | Verwaltung von Kundenkontakten, -historie und Vertriebschancen. | |
|
||||
| M007 | Geschäftspartnerstamm (Kunden/Lieferanten) | `Centron.BL/BusinessPartner`, `Centron.BL/Accounts`, `Centron.BL/CustomerArea` | Zentrale Stammdatenverwaltung für Kunden- und Lieferantenkonten. | |
|
||||
| M008 | Kontenverwaltung | `.../Modules/Finances/AccountManagement` | Verwaltung von Finanzkonten und deren Zuordnung zu Geschäftspartnern. | Ja |
|
||||
| M009 | Automatisierte Fakturierung | `.../Modules/Finances/AutomatedBilling` | Regelbasierte, automatisierte Erstellung von Rechnungen aus Verträgen/Leistungen. | Ja |
|
||||
| M010 | Flatrate-Abrechnung | `.../Modules/Finances/FlatrateBilling` | Abrechnung pauschaler Vertragsmodelle (Flatrates). | Ja |
|
||||
| M011 | Zeit-/Leistungsabrechnung | `.../Modules/Finances/TimerBilling`, `Centron.BL/Time` | Erfassung und Abrechnung erbrachter Zeit-/Dienstleistungen. | Ja |
|
||||
| M012 | Mahnwesen | `.../Modules/Finances/Dunning` | Automatisierte Überwachung von Zahlungsfristen und Mahnstufen. | Ja |
|
||||
| M013 | Offene-Posten-Verwaltung | `.../Modules/Finances/Opos` | Verwaltung offener Forderungen/Verbindlichkeiten. | Ja |
|
||||
| M014 | Zahlungsverkehr | `.../Modules/Finances/Payments`, `Centron.BL/Transactions` | Erfassung und Verbuchung von Zahlungseingängen/-ausgängen. | Ja |
|
||||
| M015 | Belegwesen (Rechnungen/Gutschriften) | `.../Modules/Finances/Receipts` | Erstellung, Nummerierung und Verwaltung von Finanzbelegen. | Ja |
|
||||
| M016 | Vertragsverwaltung & -auswertung | `.../Modules/Finances/Contracts`, `ContractEvaluation2`, `ContractEvaluationOld` | Verwaltung von Kundenverträgen und deren wirtschaftliche Auswertung. | Ja |
|
||||
| M017 | Geräte-/Zählerabrechnung | `.../Modules/Finances/DeviceClickCounter`, `Centron.BL/Devices` | Abrechnung nutzungsbasierter Geräte (z. B. Klickzähler bei Kopierern/Druckern). | Ja |
|
||||
| M018 | Produktlebenszyklus-Finanzsicht | `.../Modules/Finances/ProductLifecycleManagement` | Finanzielle Betrachtung des Produktlebenszyklus (Leasing/Abschreibung u. ä.). | |
|
||||
| M019 | Projektbezogene Finanzen | `.../Modules/Finances/Projects` | Finanzielle Steuerung/Auswertung von Projekten. | |
|
||||
| M020 | Finanz-Stammdatenlisten | `.../Modules/Finances/MasterDataLists` | Pflege von Stammdatenlisten für das Rechnungswesen. | |
|
||||
| M021 | Gutscheinverwaltung | `Centron.BL/VoucherManagement` | Ausgabe, Einlösung und Bilanzierung von Gutscheinen. | Ja |
|
||||
| M022 | Buchhaltungskern | `Centron.BL/Accounting` | Zentrale Buchhaltungslogik (Konten, Buchungssätze). | Ja |
|
||||
| M023 | SEPA-Lastschriftmandate | `.../Modules/Administration/SepaContract` | Verwaltung von SEPA-Lastschriftmandaten für den Zahlungseinzug. | Ja |
|
||||
| M024 | Reisekostenabrechnung | `.../Modules/Purchasing/TravelExpense` | Erfassung und Abrechnung von Reisekosten der Mitarbeiter. | Ja |
|
||||
| M025 | Einkaufs-/Bestellverwaltung | `.../Modules/Purchasing` (Kern), `Centron.BL/Buying` | Erfassung und Steuerung von Bestellungen bei Lieferanten. | |
|
||||
| M026 | EDI-Bestellabwicklung | `.../Modules/Purchasing/EDIManagement`, `Centron.BL/EDI` | Elektronischer Datenaustausch für Bestellprozesse mit Lieferanten. | |
|
||||
| M027 | Bestellvorschlagsliste | `.../Modules/Purchasing/OrderSuggestionList` | Automatisierte Ermittlung von Nachbestellbedarf. | |
|
||||
| M028 | Lieferantensuche | `.../Modules/Warehousing/SupplierSearch` | Suche/Auswahl von Lieferanten für Artikel. | |
|
||||
| M029 | Artikelstammdatenverwaltung | `.../Modules/Warehousing/ArticleManagement` | Pflege der zentralen Artikelstammdaten. | |
|
||||
| M030 | Artikelimport | `.../Modules/Warehousing/ArticleImport` | Massenimport von Artikeldaten aus externen Quellen. | |
|
||||
| M031 | Mengeneinheitenverwaltung | `.../Modules/Warehousing/ArticleUnitManagement` | Verwaltung von Mengeneinheiten und Umrechnungsfaktoren. | |
|
||||
| M032 | Barcodeverwaltung | `.../Modules/Warehousing/BarcodeManagement` | Zuordnung und Verwaltung von Barcodes zu Artikeln. | |
|
||||
| M033 | Kommissionierung | `.../Modules/Warehousing/Commissioning`, `Commissions` | Steuerung des Kommissioniervorgangs im Lager. | |
|
||||
| M034 | Inventur | `.../Modules/Warehousing/Inventory` | Durchführung und Auswertung von Lagerinventuren. | |
|
||||
| M035 | Warengruppenverwaltung | `.../Modules/Warehousing/MaterialGroupManagement` | Kategorisierung von Artikeln in Warengruppen. | |
|
||||
| M036 | Lager-Kontensysteme | `.../Modules/Warehousing/AccountSystems` | Verwaltung von Lagerkonten/Bewertungsverfahren. | |
|
||||
| M037 | Ausgangszahlungen Lager | `.../Modules/Warehousing/OutcomingPayments` | Abwicklung lagerbezogener Auszahlungen. | Ja |
|
||||
| M038 | Artikelsuche | `.../Modules/Warehousing/SearchArticle` | Such-/Filterfunktion über den Artikelbestand. | |
|
||||
| M039 | Versand-/Logistikabwicklung | `.../Modules/Logistic` | Steuerung von Versandprozessen und Logistikpartnern. | |
|
||||
| M040 | RMA-Retourenabwicklung | `.../Modules/Rma/NewRma`, `SendBack`, `SendForth`, `RmaSettings` | Abwicklung von Warenrücksendungen (Return Merchandise Authorization). | |
|
||||
| M041 | Maschinenverwaltung | `.../Modules/Production/MachineManagement` | Stammdatenverwaltung von Produktionsmaschinen. | |
|
||||
| M042 | Fertigungsauftragsverwaltung | `.../Modules/Production/ProductionOrder` | Erstellung und Steuerung von Fertigungsaufträgen. | |
|
||||
| M043 | Produktlebenszyklusmanagement (PLM) | `.../Modules/PLM` | Verwaltung des Produktlebenszyklus aus technischer/Produktsicht. | |
|
||||
| M044 | Qualitätsmanagement (QM) | `.../Modules/QM` | Qualitätssicherungsprozesse und -prüfungen. | |
|
||||
| M045 | Projektverwaltung | `.../Modules/ProjectManagement` | Planung und Steuerung von Kundenprojekten. | |
|
||||
| M046 | Projektpreisimport | `.../Modules/ProjectPriceImport` | Import von Projektpreislisten inkl. Differenzabgleich. | |
|
||||
| M047 | Massenänderungen | `.../Modules/Massenupdates` | Massenhafte Änderung von Datensätzen über definierte Regeln. | Ja |
|
||||
| M048 | Zahler- und Kostenstellenverwaltung | `.../Modules/PayersAndCostCenter` | Verwaltung von Zahlern und Kostenstellen für die Abrechnung. | Ja |
|
||||
| M049 | Mandantenverwaltung (Multi-Tenant) | `.../Modules/Administration/MandatorManagement` | Verwaltung mehrerer Mandanten in einer Systeminstanz. | Ja |
|
||||
| M050 | Mitarbeiterverwaltung | `.../Modules/Administration/EmployeeManagement`, `Centron.BL/EmployeeArea` | Stammdatenverwaltung von Mitarbeitern. | |
|
||||
| M051 | Länderstammdaten | `.../Modules/Administration/CountryManagement`, `Centron.BL/CountryArea` | Pflege länderspezifischer Stammdaten. | |
|
||||
| M052 | Service-/Leasingverträge | `.../Modules/Administration/ServiceAndLeasing` | Verwaltung von Service- und Leasingverträgen. | |
|
||||
| M053 | Belegkonditionen | `.../Modules/Administration/ReceiptConditions` | Konfiguration von Konditionen für Finanzbelege. | |
|
||||
| M054 | Stundenzuschlagssätze | `.../Modules/Administration/HourlySurchargeRates` | Konfiguration von Zuschlagssätzen für Zeiterfassung/Abrechnung. | Ja |
|
||||
| M055 | Textbausteinverwaltung | `.../Modules/Administration/TextBlockManagement`, `Centron.BL/TextModuleArea` | Verwaltung wiederverwendbarer Textbausteine für Dokumente. | |
|
||||
| M056 | Reportserver-Anbindung | `.../Modules/Administration/ReportServer` | Konfiguration der Anbindung an einen externen Reportserver. | |
|
||||
| M057 | Webservice-Konfiguration | `.../Modules/Administration/WebServiceSettings` | Konfiguration von Webservice-Endpunkten/-Zugängen. | Ja |
|
||||
| M058 | Externe Tool-Integration (Konfiguration) | `.../Modules/Administration/ExternalTools`, `Centron.BL/ExternalToolsBL` | Konfiguration der Einbindung externer Werkzeuge. | |
|
||||
| M059 | Mail-/Kalenderintegration (Konfiguration) | `.../Modules/Administration/MailAndCalender`, `MailTemplates` | Konfiguration von Mail-/Kalenderanbindung und Mailvorlagen. | |
|
||||
| M060 | Telefonanlagen-Einstellungen | `.../Modules/Administration/PhoneSettings` | Konfiguration der TK-Anlagenanbindung. | |
|
||||
| M061 | Eskalationsregeln | `.../Modules/Administration/EscalationsSettings` | Konfiguration automatischer Eskalationen (z. B. im Helpdesk). | |
|
||||
| M062 | Aufgabenverwaltungs-Einstellungen | `.../Modules/Administration/TaskManagmentSettings`, `Centron.BL/TaskManager` | Konfiguration der Aufgaben-/Taskverwaltung. | |
|
||||
| M063 | Web-Warenkorb-Konfiguration | `.../Modules/Administration/WebCart` | Konfiguration eines webbasierten Warenkorbs. | |
|
||||
| M064 | Update-Benachrichtigung | `.../Modules/Administration/UpdateAvailableNotificationSettings` | Konfiguration von Hinweisen auf verfügbare Softwareupdates. | |
|
||||
| M065 | Systemkonfigurations-DB & technische Einstellungen | `.../Modules/Administration/CentronConfigDb`, `Cache`, `Connections`, `Settings`, `Customization`, `SqlManagers`, `LogViewer`, `Profiling`, `SendDeliveryListShippingConfirmationSettings` | Zentrale technische Systemkonfiguration inkl. Datenbankverbindungen. | Ja |
|
||||
| M066 | DSGVO-/Datenschutzfunktionen | `.../Modules/Administration/DSGVO` | Funktionen zur Umsetzung datenschutzrechtlicher Anforderungen. | Ja |
|
||||
| M067 | PDF-Signatur | `.../Modules/Administration/PdfSigning` | Digitale Signatur von PDF-Dokumenten. | Ja |
|
||||
| M068 | PDF-Export | `.../Modules/Administration/PdfExport` | Export von Dokumenten/Reports als PDF. | |
|
||||
| M069 | Berechtigungsverwaltung | `.../Modules/Administration/RightsManagement`, `Centron.BL/Security` | Verwaltung von Benutzerrollen und Zugriffsrechten. | Ja |
|
||||
| M070 | Zwei-Faktor-Authentifizierung | `Centron.BL/TwoFactorAuthenticator` | Zusätzlicher Authentifizierungsfaktor beim Login. | Ja |
|
||||
| M071 | Passwortmanager | `.../Modules/PasswordManager`, `Centron.BL/PasswordManagementArea` | Verwaltung sensibler Zugangsdaten innerhalb des ERP. | Ja |
|
||||
| M072 | Ticketverwaltung | `.../Modules/Helpdesk/TicketList`, `TicketDetails`, `Centron.BL/TicketProjects` | Erfassung und Bearbeitung von Helpdesk-Tickets. | |
|
||||
| M073 | Ticket-Prozessvorlagen | `.../Modules/Helpdesk/TicketProcessTemplates` | Vorlagen für standardisierte Ticket-Bearbeitungsabläufe. | |
|
||||
| M074 | Checklistenverwaltung | `.../Modules/Helpdesk/CentronChecklist`, `Centron.BL/CheckListArea`, `Centron.BL/ItPlanner` | Verwaltung von Checklisten für Service-/IT-Prozesse. | |
|
||||
| M075 | Ereignis-/SLA-Überwachung | `.../Modules/Helpdesk/Events`, `ExpectedEvents`, `ExpectedEventsReporting`, `Centron.BL/ExpectedEvents` | Überwachung erwarteter Ereignisse/Fristen (SLA-Bezug). | |
|
||||
| M076 | Helpdesk-Aufgabenverwaltung | `.../Modules/Helpdesk/TaskManagement` | Aufgabenverwaltung im Helpdesk-Kontext. | |
|
||||
| M077 | Helpdesk-Dashboard | `.../Modules/Helpdesk/Dashboard` | Übersichtsdarstellung von Helpdesk-Kennzahlen. | |
|
||||
| M078 | Verbindungsnummernverwaltung | `.../Modules/Helpdesk/ConnectionNumber` | Verwaltung von Kunden-/Anschlussnummern im Helpdesk. | |
|
||||
| M079 | Kunden-Selfcare-Portal | `.../Modules/Helpdesk/SendSelfCareForm`, `Centron.BL/SelfCare` | Self-Service-Funktionen für Endkunden. | |
|
||||
| M080 | Externe Helpdesk-Anbindung | `Centron.BL/ExternalHelpdesk` | Anbindung externer Helpdesk-/Ticketsysteme. | |
|
||||
| M081 | E-Mail-Verarbeitung | `Centron.BL/Mail`, `MailScanner`, `Mailings` | Versand, Posteingangsscan und Massenmailing per E-Mail. | |
|
||||
| M082 | Chat-Funktion | `Centron.BL/Chats` | Interne Chat-/Kommunikationsfunktion. | |
|
||||
| M083 | Telefonie-Integration | `.../Modules/MyCentron/Telephony`, `Centron.BL/Tapi`, `assemblies/tapi` | Anbindung an TK-Anlagen für Anrufsteuerung (TAPI). | |
|
||||
| M084 | Terminverwaltung/Kalender | `.../Modules/Calendar`, `MyCentron/Calendar`, `Centron.BL/Calendar`, `Centron.BL/AppointmentRequests` | Terminverwaltung und Terminanfragen. | |
|
||||
| M085 | Aufgaben & Tagesplanung | `.../Modules/MyCentron/MyDay`, `TodoList`, `Centron.BL/MyDay`, `Centron.BL/ToDoArea` | Persönliche Aufgaben-/Tagesplanung der Benutzer. | |
|
||||
| M086 | Finanzbuchhaltungs-Export | `.../Modules/DataExchange/BookKeeping`, `DatevOnline2020` | Export von Buchhaltungsdaten an externe FiBu-Systeme (z. B. DATEV). | Ja |
|
||||
| M087 | Zahlungsverkehrsschnittstelle | `.../Modules/DataExchange/PaymentTransactions` | Schnittstelle für elektronischen Zahlungsverkehr. | Ja |
|
||||
| M088 | Dokumentensynchronisation | `.../Modules/DataExchange/DocSync`, `DocuForm`, `Centron.Api.docuFORM` | Synchronisation/Erzeugung von Dokumenten über docuFORM. | |
|
||||
| M089 | Remote-Monitoring-Anbindung | `.../Modules/DataExchange/Rmm` | Anbindung an Remote-Monitoring-Systeme (IT-Dienstleister). | |
|
||||
| M090 | Filialbezogene Lieferantenbestellung | `.../Modules/DataExchange/SupplierOrderPerBranch` | Bestellabwicklung mit Filialbezug gegenüber Lieferanten. | |
|
||||
| M091 | Generische Import/Export-Connectoren | `.../Modules/DataExchange/Connectors`, `DataImport`, `DataExport` | Allgemeine Datenimport-/-exportmechanismen. | |
|
||||
| M092 | Telekom-DIVE-Anbindung | `.../Modules/DataExchange/TelekomDive`, `Modules/TelekomDive` | Anbindung an die Telekom-DIVE-Plattform. | |
|
||||
| M093 | Integrationsframework | `Centron.BL/Integrations` | Generisches Framework zur Anbindung externer Systeme. | |
|
||||
| M094 | Bankdaten-Schnittstelle (FinAPI) | `src/apis/Centron.APIs.FinAPI` | Anbindung an Bankkonten/-transaktionen über den Dienst FinAPI. | Ja |
|
||||
| M095 | Produktdaten-Schnittstellen | `Centron.APIs.ITscopeDataAccess`, `IcecatDataAccess`, `CopDataAccess`, `EgisDataAccess` | Anbindung externer Produktdatenkataloge. | |
|
||||
| M096 | Versanddienstleister-Anbindung | `Centron.Api.Gls`, `Centron.Api.Shipcloud` | Anbindung an Versanddienstleister für Paketversand. | |
|
||||
| M097 | E-Rechnungsformat eBInterface | `Centron.Api.EbInterface` | Erzeugung elektronischer Rechnungen im eBInterface-Format. | Ja |
|
||||
| M098 | Handelspool-/Großhändleranbindung | `Centron.BL/TradePool`, `RiverDivo`, `CPra` | Anbindung an Großhändler-/Handelspool-Plattformen für Bestellung/Preise. | |
|
||||
| M099 | CentronNexus Mobile-Ticketapp | `src/nexus/CentronNexus`, `CentronNexus.Host`, `Centron.DAO/Mobile`, `Centron.BL/Mobile` | Mobile Anwendung für Ticket-/Außendienstprozesse. | |
|
||||
| M100 | Outlook-Add-in | `src/nexus/CentronNexus.OutlookAddIn`, `Centron.BL/Outlook` | Integration von c-entron-Funktionen in Microsoft Outlook. | |
|
||||
| M101 | Web-Version/Kundenportal | `Centron.BL/WebSuite`, `WebVersion`, `WebLinks` | Webbasierter Zugriff auf ERP-Funktionen/Kundenportal. | |
|
||||
| M102 | Webservice-Hostinfrastruktur | `src/webservice/Centron.Controllers`, `Centron.Host`, `Centron.Host.Console`, `Centron.Host.WindowsService`, `Centron.WebServices.Core`, `c-entron.misc.ConnectionManager` | Bereitstellung der REST/Web-API-Schicht des Systems. | Ja |
|
||||
| M103 | API-Gateway | `src/backend/Centron.Gateway`, `Centron.BL/Gateway` | Vermittelnde Schicht zwischen Clients und Backend-Diensten. | Ja |
|
||||
| M104 | Reportengine & Reports-Modul | `.../Modules/Reports`, `Centron.BL/ReportEngine`, `Reporting`, `Centron.DAO/Reporting` | Erzeugung und Verwaltung von Reports/Auswertungen. | |
|
||||
| M105 | Statistiken & Management-Info | `.../Modules/Statistics` | Kennzahlenauswertung für Vertrieb, MSP, Management. | |
|
||||
| M106 | Dashboard | `.../Modules/Dashboard` | Zentrale Startseite mit Kennzahlen-Widgets. | |
|
||||
| M107 | Volltextsuche | `Centron.BL/IndexSearch` | Indizierung und Volltextsuche über Systemdaten. | |
|
||||
| M108 | Change-Tracking/Audit-Log | `Centron.BL/ChangeTracking`, `Centron.DAO/ChangeTracking` | Protokollierung von Datenänderungen zu Nachvollziehbarkeitszwecken. | Ja |
|
||||
| M109 | Telemetrie/Monitoring | `Centron.BL/Telemetry` | Erfassung von Nutzungs-/Systemtelemetriedaten. | |
|
||||
| M110 | Künstliche-Intelligenz-Integration | `.../Modules/ArtificialIntelligence`, `Centron.BL/ArtificialIntelligence` | Integration von KI-Funktionen (Chat, Texterstellung/-bewertung) in den Workflow. | |
|
||||
| M111 | Online-Banking-Anbindung | `.../Modules/OnlineBanking` | Direkte Anbindung an Online-Banking-Konten. | Ja |
|
||||
| M112 | Umfragen | `.../Modules/Survey` | Erstellung und Auswertung von Kundenumfragen. | |
|
||||
| M113 | Externe-Tool-Ausführung | `.../Modules/ExternalTool` | Start/Einbindung externer Anwendungen aus dem ERP heraus. | |
|
||||
| M114 | Asset-/Gerätestammverwaltung | `Centron.BL/DocuBoard` (`AssetManagement*`) | Verwaltung von Hardware-Assets (Konsolidierungsbeispiel „Stammblätter"/Assets, siehe unten). | |
|
||||
| M115 | Social-Media- & Video-Portal-Integration | `Centron.BL/SocialMedia`, `.../Modules/Global/VideoPortal`, `Centron.BL/VideoPortal` | Anbindung von Social-Media-Kanälen und Video-Content. | |
|
||||
| M116 | Benachrichtigungssystem | `Centron.BL/Notifications`, `NexusNotifications`, `NexusTicketViews` | Systemweite Benachrichtigungen (Desktop/Mobile). | |
|
||||
| M117 | Tagging, Referenzen & Wissensdatenbank | `Centron.BL/Tags`, `ObjectExternalReferences`, `Urls`, `DocumentationArea`, `Modules/Global/Help` | Verschlagwortung, externe Objektreferenzen und Hilfe-/Wissensinhalte. | |
|
||||
| M118 | Datei-/Storage-Abstraktion | `Centron.BL/Storage`, `Centron.WPF.UI/CentronFileSystem` | Abstraktion des Dateizugriffs/-ablage über verschiedene Speicherorte. | |
|
||||
| M119 | Installations- & Containerisierungsinfrastruktur | `deployment/`, `docker/` | Bereitstellung von Installationspaketen und Containerimages für Betrieb/CI. | Ja |
|
||||
| M120 | Technische Basisbibliotheken & Systemstart | `src/shared/Centron.Controls`, `Centron.Core`, `Centron.BL/Start`, `Centron.BL/GUI`, `Centron.BL/CentronIcons`, `Centron.WPF.UI/Start` | Gemeinsame UI-Controls, Kernbibliotheken und Anwendungsstart-/Lizenzprüfung. | Ja |
|
||||
|
||||
## Abdeckungstabelle
|
||||
|
||||
Je Modul: Einstufung `tief | mittel | flach` (kein Modul ist `nicht analysiert` - siehe Selbstbewertung)
|
||||
und Anzahl der daraus erzeugten Anforderungen (SyRS + zugehörige SwRS-Vertiefungen). Einstufung:
|
||||
`tief` = mindestens eine SwRS-Vertiefung mit zusätzlichem, über die SyRS-Ebene hinausgehendem
|
||||
PRIMÄR-Beleg vorhanden; `mittel` = SyRS-Anforderung mit mindestens einem PRIMÄR-Beleg (durchsetzende
|
||||
Code-/DB-Stelle gefunden), aber keine SwRS-Vertiefung; `flach` = nur SEKUNDÄR-/KONTEXT-Beleg (UI-Modul
|
||||
oder Konfigurationsordner identifiziert, aber keine durchsetzende Backend-Stelle innerhalb dieser
|
||||
Iteration gefunden).
|
||||
|
||||
| Modul | Einstufung | Anzahl Anforderungen |
|
||||
|---|---|---|
|
||||
| M001 Angebots- und Auftragsverwaltung | mittel | 1 |
|
||||
| M002 Produktmatrix-Konfigurator | mittel | 1 |
|
||||
| M003 Vertriebs-Serienmail | mittel | 1 |
|
||||
| M004 Sonderartikel-Import | mittel | 1 |
|
||||
| M005 Marketingkampagnen | mittel | 1 |
|
||||
| M006 Kundenbeziehungsmanagement (CRM) | mittel | 1 |
|
||||
| M007 Geschäftspartnerstamm (Kunden/Lieferanten) | mittel | 1 |
|
||||
| M008 Kontenverwaltung | tief | 2 |
|
||||
| M009 Automatisierte Fakturierung | mittel | 1 |
|
||||
| M010 Flatrate-Abrechnung | mittel | 1 |
|
||||
| M011 Zeit-/Leistungsabrechnung | mittel | 1 |
|
||||
| M012 Mahnwesen | tief | 2 |
|
||||
| M013 Offene-Posten-Verwaltung | tief | 2 |
|
||||
| M014 Zahlungsverkehr | mittel | 1 |
|
||||
| M015 Belegwesen (Rechnungen/Gutschriften) | tief | 2 |
|
||||
| M016 Vertragsverwaltung & -auswertung | mittel | 1 |
|
||||
| M017 Geräte-/Zählerabrechnung | tief | 3 |
|
||||
| M018 Produktlebenszyklus-Finanzsicht | flach | 1 |
|
||||
| M019 Projektbezogene Finanzen | flach | 1 |
|
||||
| M020 Finanz-Stammdatenlisten | mittel | 1 |
|
||||
| M021 Gutscheinverwaltung | mittel | 1 |
|
||||
| M022 Buchhaltungskern | tief | 2 |
|
||||
| M023 SEPA-Lastschriftmandate | tief | 2 |
|
||||
| M024 Reisekostenabrechnung | flach | 1 |
|
||||
| M025 Einkaufs-/Bestellverwaltung | mittel | 1 |
|
||||
| M026 EDI-Bestellabwicklung | mittel | 1 |
|
||||
| M027 Bestellvorschlagsliste | tief | 2 |
|
||||
| M028 Lieferantensuche | mittel | 1 |
|
||||
| M029 Artikelstammdatenverwaltung | tief | 2 |
|
||||
| M030 Artikelimport | mittel | 1 |
|
||||
| M031 Mengeneinheitenverwaltung | tief | 2 |
|
||||
| M032 Barcodeverwaltung | tief | 2 |
|
||||
| M033 Kommissionierung | mittel | 1 |
|
||||
| M034 Inventur | tief | 2 |
|
||||
| M035 Warengruppenverwaltung | mittel | 1 |
|
||||
| M036 Lager-Kontensysteme | mittel | 1 |
|
||||
| M037 Ausgangszahlungen Lager | flach | 1 |
|
||||
| M038 Artikelsuche | mittel | 1 |
|
||||
| M039 Versand-/Logistikabwicklung | mittel | 1 |
|
||||
| M040 RMA-Retourenabwicklung | mittel | 1 |
|
||||
| M041 Maschinenverwaltung | tief | 2 |
|
||||
| M042 Fertigungsauftragsverwaltung | mittel | 1 |
|
||||
| M043 Produktlebenszyklusmanagement (PLM) | mittel | 1 |
|
||||
| M044 Qualitätsmanagement (QM) | flach | 1 |
|
||||
| M045 Projektverwaltung | mittel | 1 |
|
||||
| M046 Projektpreisimport | flach | 1 |
|
||||
| M047 Massenänderungen | tief | 2 |
|
||||
| M048 Zahler- und Kostenstellenverwaltung | mittel | 1 |
|
||||
| M049 Mandantenverwaltung (Multi-Tenant) | tief | 2 |
|
||||
| M050 Mitarbeiterverwaltung | tief | 2 |
|
||||
| M051 Länderstammdaten | mittel | 1 |
|
||||
| M052 Service-/Leasingverträge | flach | 1 |
|
||||
| M053 Belegkonditionen | flach | 1 |
|
||||
| M054 Stundenzuschlagssätze | mittel | 1 |
|
||||
| M055 Textbausteinverwaltung | mittel | 1 |
|
||||
| M056 Reportserver-Anbindung | flach | 1 |
|
||||
| M057 Webservice-Konfiguration | mittel | 1 |
|
||||
| M058 Externe Tool-Integration (Konfiguration) | mittel | 1 |
|
||||
| M059 Mail-/Kalenderintegration (Konfiguration) | flach | 1 |
|
||||
| M060 Telefonanlagen-Einstellungen | flach | 1 |
|
||||
| M061 Eskalationsregeln | flach | 1 |
|
||||
| M062 Aufgabenverwaltungs-Einstellungen | flach | 1 |
|
||||
| M063 Web-Warenkorb-Konfiguration | flach | 1 |
|
||||
| M064 Update-Benachrichtigung | flach | 1 |
|
||||
| M065 Systemkonfigurations-DB & technische Einstellungen | tief | 2 |
|
||||
| M066 DSGVO-/Datenschutzfunktionen | tief | 2 |
|
||||
| M067 PDF-Signatur | tief | 2 |
|
||||
| M068 PDF-Export | flach | 1 |
|
||||
| M069 Berechtigungsverwaltung | tief | 2 |
|
||||
| M070 Zwei-Faktor-Authentifizierung | tief | 2 |
|
||||
| M071 Passwortmanager | tief | 2 |
|
||||
| M072 Ticketverwaltung | mittel | 1 |
|
||||
| M073 Ticket-Prozessvorlagen | mittel | 1 |
|
||||
| M074 Checklistenverwaltung | mittel | 1 |
|
||||
| M075 Ereignis-/SLA-Überwachung | mittel | 1 |
|
||||
| M076 Helpdesk-Aufgabenverwaltung | flach | 1 |
|
||||
| M077 Helpdesk-Dashboard | flach | 1 |
|
||||
| M078 Verbindungsnummernverwaltung | mittel | 1 |
|
||||
| M079 Kunden-Selfcare-Portal | mittel | 1 |
|
||||
| M080 Externe Helpdesk-Anbindung | mittel | 1 |
|
||||
| M081 E-Mail-Verarbeitung | tief | 2 |
|
||||
| M082 Chat-Funktion | tief | 2 |
|
||||
| M083 Telefonie-Integration | mittel | 1 |
|
||||
| M084 Terminverwaltung/Kalender | mittel | 1 |
|
||||
| M085 Aufgaben & Tagesplanung | mittel | 1 |
|
||||
| M086 Finanzbuchhaltungs-Export | mittel | 1 |
|
||||
| M087 Zahlungsverkehrsschnittstelle | tief | 2 |
|
||||
| M088 Dokumentensynchronisation | tief | 2 |
|
||||
| M089 Remote-Monitoring-Anbindung | mittel | 1 |
|
||||
| M090 Filialbezogene Lieferantenbestellung | flach | 1 |
|
||||
| M091 Generische Import/Export-Connectoren | flach | 1 |
|
||||
| M092 Telekom-DIVE-Anbindung | mittel | 1 |
|
||||
| M093 Integrationsframework | flach | 1 |
|
||||
| M094 Bankdaten-Schnittstelle (FinAPI) | tief | 2 |
|
||||
| M095 Produktdaten-Schnittstellen | mittel | 1 |
|
||||
| M096 Versanddienstleister-Anbindung | mittel | 1 |
|
||||
| M097 E-Rechnungsformat eBInterface | tief | 2 |
|
||||
| M098 Handelspool-/Großhändleranbindung | mittel | 1 |
|
||||
| M099 CentronNexus Mobile-Ticketapp | mittel | 1 |
|
||||
| M100 Outlook-Add-in | tief | 2 |
|
||||
| M101 Web-Version/Kundenportal | mittel | 1 |
|
||||
| M102 Webservice-Hostinfrastruktur | mittel | 1 |
|
||||
| M103 API-Gateway | mittel | 1 |
|
||||
| M104 Reportengine & Reports-Modul | mittel | 1 |
|
||||
| M105 Statistiken & Management-Info | mittel | 1 |
|
||||
| M106 Dashboard | flach | 1 |
|
||||
| M107 Volltextsuche | tief | 2 |
|
||||
| M108 Change-Tracking/Audit-Log | tief | 2 |
|
||||
| M109 Telemetrie/Monitoring | flach | 1 |
|
||||
| M110 Künstliche-Intelligenz-Integration | mittel | 1 |
|
||||
| M111 Online-Banking-Anbindung | mittel | 1 |
|
||||
| M112 Umfragen | flach | 1 |
|
||||
| M113 Externe-Tool-Ausführung | mittel | 1 |
|
||||
| M114 Asset-/Gerätestammverwaltung | tief | 2 |
|
||||
| M115 Social-Media- & Video-Portal-Integration | mittel | 1 |
|
||||
| M116 Benachrichtigungssystem | mittel | 1 |
|
||||
| M117 Tagging, Referenzen & Wissensdatenbank | mittel | 1 |
|
||||
| M118 Datei-/Storage-Abstraktion | mittel | 1 |
|
||||
| M119 Installations- & Containerisierungsinfrastruktur | mittel | 1 |
|
||||
| M120 Technische Basisbibliotheken & Systemstart | flach | 1 |
|
||||
|
||||
**Summe:** 120 Module, davon 32 tief, 63 mittel, 25 flach, **0 nicht analysiert**. Insgesamt 150
|
||||
SyRS-/SwRS-Anforderungen (120 SyRS + 30 SwRS) plus 20 StRS-Anforderungen = **170 Anforderungen**.
|
||||
|
||||
## Konsistenzcheck
|
||||
|
||||
- **Doppelte oder mehrfach vergebene IDs:** Keine. Automatisierte Prüfung über alle 170 IDs
|
||||
(`StRS-1..20`, `SyRS-1..120`, `SwRS-1..30`) bestätigt Eindeutigkeit.
|
||||
- **Anforderungen ohne Beleg:** Keine. Jede der 170 Anforderungen führt mindestens einen Beleg
|
||||
(`[PRIMÄR]`, `[SEKUNDÄR]` oder `[KONTEXT]`), automatisiert geprüft.
|
||||
- **Anforderungen ohne Angabe zur `Übernahmewürdigkeit`:** Keine. Feld ist in allen 170 Blöcken
|
||||
vorhanden (automatisiert geprüft, ebenso alle übrigen Pflichtfelder: `Titel`, `Ebene`, `Typ`,
|
||||
`Akteur`, `Vorbedingung`, `Fakt`, `Aussage`, `Ergebnis`, `Prüfidee`, `Tracelinks`, `Konsolidierung`,
|
||||
`Status`).
|
||||
- **Tracelinks auf nicht existierende IDs:** Keine. Alle in `Tracelinks`-Feldern referenzierten IDs
|
||||
wurden gegen die Liste aller 170 tatsächlich vergebenen IDs automatisiert abgeglichen; keine
|
||||
Abweichung gefunden.
|
||||
- **Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk:** 30 der 170 Anforderungen
|
||||
(17,6 %) tragen einen expliziten Konsolidierungskandidaten-Vermerk (Feld `Konsolidierung: Kandidat`),
|
||||
u. a. das im Auftrag genannte Stammblatt-/Asset-Beispiel (SyRS-114/SwRS-21), die parallelen
|
||||
E-Mail-Versandwege (SyRS-3/SyRS-81), die drei unabhängigen Großhändleranbindungen (SyRS-98) und die
|
||||
vier unabhängigen Produktdatenquellen (SyRS-95). Diese Markierungen entstanden während der
|
||||
inhaltlichen Analyse jeder einzelnen Anforderung; ein zusätzlicher, separater Abgleich aller 170
|
||||
Anforderungen paarweise (N²-Vergleich) wurde in dieser Iteration **nicht** durchgeführt - das ist
|
||||
eine bekannte Lücke (siehe Selbstbewertung).
|
||||
- **Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) und ihre
|
||||
Belegsituation:** 36 Module des Inventars sind als risikorelevant markiert. Alle 36 zugehörigen
|
||||
SyRS-Anforderungen erfüllen die verschärfte Evidenzanforderung (mindestens ein `PRIMÄR`-Beleg
|
||||
**oder** explizite `[HYPOTHESE]`-Kennzeichnung); zwei Fälle (SyRS-54, SyRS-57) wurden im Zuge dieses
|
||||
Konsistenzchecks nachgebessert (siehe unten).
|
||||
|
||||
| ID | Titel | PRIMÄR-Beleg vorhanden | HYPOTHESE-Kennzeichnung |
|
||||
|---|---|---|---|
|
||||
| SyRS-8 | Zeitlich gültige Bankkonten je Kunde verwalten | ja | nein |
|
||||
| SyRS-9 | Automatisierte Sammelfakturierung auf Basis von Verträgen und Zählerständen | ja | nein |
|
||||
| SyRS-10 | Zählerbasierte Freikontingente und Staffelpreise in der Flatrate-/Zählerabrechnung | ja | nein |
|
||||
| SyRS-11 | Erfassung und Abrechnung geleisteter Arbeitszeit | ja | nein |
|
||||
| SyRS-12 | Mehrstufiger Mahnlauf mit Nachvollziehbarkeit von Datum und bearbeitendem Mitarbeiter | ja | nein |
|
||||
| SyRS-13 | Berechtigungsprüfung für den Zugriff auf offene Posten | ja | nein |
|
||||
| SyRS-14 | Erfassung und Zuordnung von Zahlungseingängen zu offenen Posten | ja | nein |
|
||||
| SyRS-15 | Fortlaufende, eindeutige Belegnummerierung für Rechnungen | ja | nein |
|
||||
| SyRS-16 | Vertragsverwaltung mit externem Artikel-Import und Auswertung | ja | nein |
|
||||
| SyRS-17 | Monotonieprüfung bei importierten Zählerständen (Klickzähler) | ja | nein |
|
||||
| SyRS-21 | Gutscheinausgabe, -status und -einlösung | ja | nein |
|
||||
| SyRS-22 | Zentrale Bankkonten-Stammdatenverwaltung als Buchhaltungsgrundlage | ja | nein |
|
||||
| SyRS-23 | SEPA-Lastschriftmandate mit Vorlagen und PDF-Erzeugung | ja | ja |
|
||||
| SyRS-24 | Reisekostenerfassung im Einkaufskontext | nein | ja |
|
||||
| SyRS-37 | Verbuchung von Ausgangszahlungen im Lagerkontext | nein | ja |
|
||||
| SyRS-47 | Kontrollierte Massenänderung von Beleg-, Artikel- und Kontodaten mit Fehlerprotokoll | ja | nein |
|
||||
| SyRS-48 | Zuordnung von Kosten zu Zahlern und Kostenstellen | ja | nein |
|
||||
| SyRS-49 | Mandantenspezifische Bankdaten und Firmenlogos je Mandant | ja | nein |
|
||||
| SyRS-54 | Konfigurierbare Stundenzuschlagssätze für die Zeitabrechnung | ja | nein |
|
||||
| SyRS-57 | Inkonsistent verschlüsselte Zugangsdaten in der Webservice-Konfiguration | ja | nein |
|
||||
| SyRS-65 | Administrative Einsicht in SQL-Ausführung, Backups und Blockierungen | ja | ja |
|
||||
| SyRS-66 | DSGVO-Löschfunktion für Kontaktdaten mit Rechteprüfung und Protokoll | ja | ja |
|
||||
| SyRS-67 | Verschlüsselte Speicherung von PDF-Signaturzertifikat und -Passwort mit Rechteprüfung | ja | nein |
|
||||
| SyRS-69 | Rollenbasierte Berechtigungsprüfung mit geschütztem Administratoren-Konstrukt | ja | nein |
|
||||
| SyRS-70 | Mehrere Authentifizierungsverfahren über eine zentrale Factory | ja | nein |
|
||||
| SyRS-71 | Zwei-Faktor-Authentifizierung per PIN mit Protokollierung fehlender Schlüssel | ja | nein |
|
||||
| SyRS-86 | Konfigurierbarer Buchhaltungsexport mit Doppelexport-Schutz | ja | nein |
|
||||
| SyRS-87 | SEPA-Lastschrift-Export in mehreren PAIN.008-Formatversionen | ja | nein |
|
||||
| SyRS-94 | Bankkontenabruf und Zahlungsinitiierung über FinAPI | ja | nein |
|
||||
| SyRS-97 | Elektronische Rechnungserzeugung im eBInterface-Format | ja | nein |
|
||||
| SyRS-102 | Zentrale Webservice-Hostinfrastruktur mit mehreren Betriebsarten | ja | nein |
|
||||
| SyRS-103 | Formatspezifische Buchhaltungsexport-Adapter im API-Gateway | ja | nein |
|
||||
| SyRS-108 | Automatisierte, ORM-seitige Änderungsprotokollierung | ja | nein |
|
||||
| SyRS-111 | Online-Banking-Zugriff als lizenzierte Ausprägung der FinAPI-Anbindung | ja | nein |
|
||||
| SyRS-119 | Parallele Bereitstellung als Windows-Installationspaket und Container-Images | ja | nein |
|
||||
| SyRS-120 | Gemeinsame UI-Steuerelemente und Lizenzprüfung beim Anwendungsstart | nein | ja |
|
||||
|
||||
**Wichtigster risikorelevanter Einzelbefund:** SyRS-66/SwRS-3 - die DSGVO-Löschfunktion ist für vier
|
||||
von mehreren Objekttypen (Kunde, Lieferant, Konto, ContactManagement-Kontakt) im Code aktiv
|
||||
deaktiviert (`throw new NotImplementedException(...)`), während die umgebende Rechteprüfung und
|
||||
Protokollierung korrekt implementiert sind. Dies ist unmittelbar rechtlich relevant (DSGVO Art. 17)
|
||||
und sollte in der Neuimplementierung vorrangig behoben werden.
|
||||
- **Abgleich `Hypothesen.md` gegen Inline-Markierungen:** Deckungsgleich. `Hypothesen.md` enthält
|
||||
genau die 24 Anforderungen (14 aus SyRS, 10 aus SwRS), die mindestens eine `[HYPOTHESE]`-Markierung
|
||||
tragen (automatisiert über alle drei Dateien geprüft) - keine zusätzlichen freien Fragen ohne
|
||||
Anforderungsbezug wurden dort aufgenommen.
|
||||
|
||||
## Selbstbewertung
|
||||
|
||||
**Tiefe der Analyse je Modul:** Von den 120 Inventarmodulen wurden 32 **tief** (SwRS-Vertiefung mit
|
||||
zusätzlichem PRIMÄR-Beleg), 63 **mittel** (mindestens ein PRIMÄR-Beleg auf SyRS-Ebene, aber keine
|
||||
weitere Vertiefung) und 25 **flach** (nur SEKUNDÄR-/KONTEXT-Beleg, keine durchsetzende Backend-Stelle
|
||||
in dieser Iteration lokalisiert) analysiert. **0 Module blieben unanalysiert.**
|
||||
|
||||
**Mindestabdeckung erreicht?** Ja. Jedes der 120 Inventarmodule erhielt mindestens eine Anforderung
|
||||
(tatsächlich mindestens eine SyRS-Anforderung, 32 Module zusätzlich mindestens eine SwRS-Vertiefung);
|
||||
kein Modul musste als „nicht analysiert" mit Begründung geführt werden.
|
||||
|
||||
**Wo war der Beleg dünn?** Die 25 „flach" eingestuften Module sind überwiegend administrative
|
||||
Konfigurationsbereiche (z. B. `ReportServer`, `MailAndCalender`, `PhoneSettings`,
|
||||
`EscalationsSettings`, `TaskManagmentSettings`, `WebCart`, `UpdateAvailableNotificationSettings`), bei
|
||||
denen sich zwar ein eigenständiger, benannter UI-Modulordner fand, aber innerhalb des Zeitrahmens
|
||||
dieser Iteration keine eindeutig zuordenbare, durchsetzende Backend-Klasse identifiziert werden konnte
|
||||
- vermutlich, weil diese Einstellungen über eine gemeinsame, generische `AppSettingsBL`-Infrastruktur
|
||||
(vgl. SyRS-1) verarbeitet werden, deren konkrete Auswertungsstellen je Einstellung nicht einzeln
|
||||
nachverfolgt wurden. Zusätzlich sind vier Module (`Reisekostenabrechnung`, `Ausgangszahlungen Lager`,
|
||||
`ServiceAndLeasing`, `Qualitätsmanagement`) mit `[HYPOTHESE]` markiert, weil trotz Suche keine
|
||||
eindeutige Backend-Zuordnung gefunden wurde - hier ist unklar, ob die fachliche Logik tatsächlich
|
||||
primär UI-seitig liegt oder ob die zuständige Backend-Klasse schlicht nicht gefunden wurde. Bei den
|
||||
risikorelevanten Modulen liegt die Belegdichte dagegen hoch: 33 von 36 risikorelevanten Anforderungen
|
||||
(91,7 %) tragen einen PRIMÄR-Beleg.
|
||||
|
||||
**24 von 170 Anforderungen (14,1 %) sind mit `[HYPOTHESE]` markiert** - der Anteil ist damit niedriger
|
||||
als in Iteration 01 (dort 0-26,2 % je Lauf, im Mittel stark schwankend), aber deutlich über null: Bei
|
||||
einer Codebasis dieser Größe (>85 fachliche Domänen, mehrere Jahrzehnte Entwicklungsgeschichte
|
||||
erkennbar an parallelen Datenmodellen wie `EmployeeDepartment`/`EmployeeDepartment2`) ist eine Analyse
|
||||
ganz ohne offene Punkte nicht plausibel. Die Hypothesen verteilen sich auf drei Kategorien: (1) fehlende
|
||||
Backend-Zuordnung bei ansonsten klar benannten UI-Modulen (z. B. SyRS-24, SyRS-37, SyRS-52), (2) offene
|
||||
Abgrenzungsfragen zwischen zwei ähnlich benannten Modulen (z. B. SyRS-18/SyRS-43, dort während der
|
||||
Analyse durch einen Folgefund in SyRS-43 bereits teilweise aufgelöst), und (3) Bewertungsfragen zu
|
||||
gefundenen Sicherheits-/Architekturmustern, deren Risikorelevanz ohne Rücksprache mit dem Fachbereich
|
||||
nicht abschließend einzuschätzen ist (z. B. SwRS-9, SwRS-19).
|
||||
|
||||
**Wesentliche Einzelbefunde dieser Iteration** (über die reine Abdeckung hinaus):
|
||||
1. **DSGVO-Löschfunktion nicht betriebsbereit** (SyRS-66/SwRS-3) - vier zentrale Löschroutinen werfen
|
||||
`NotImplementedException`, obwohl die umgebende Rechteprüfung/Protokollierung korrekt implementiert
|
||||
ist. Höchste Priorität für eine Folgeiteration bzw. den Fachbereich.
|
||||
2. **Konsolidierungsbeispiel „Stammblätter"/Assets bestätigt und präzisiert** (SyRS-114/SwRS-21) -
|
||||
Drucker werden über `NetworkComponentDataPrinter` (Netzwerkdokumentation) geführt, alle übrige
|
||||
Hardware über `AssetManagementArticleAssignment` (DocuBoard); beide Datenmodelle haben keine
|
||||
gemeinsame Basis.
|
||||
3. **Inkonsistente Verschlüsselung sensibler Konfigurationswerte** (SyRS-57, SwRS-10) - während die
|
||||
meisten identifizierten sensiblen Werte (Zertifikatspasswörter für PDF-Signatur, Postfach-Kennwörter,
|
||||
Datenbank-/Proxy-/Radius-Zugangsdaten in der Webservice-Konfiguration) korrekt mit `AESCryptoLogic`
|
||||
verschlüsselt werden, wird `WebServiceCertificatePassword` an einer identifizierten Stelle im
|
||||
Klartext geschrieben - ein konkreter, gezielt zu behebender Befund.
|
||||
4. **Mehrfache parallele Integrationen für strukturell gleichartige externe Systeme** ohne gemeinsame
|
||||
Abstraktionsschicht: vier Produktdatenquellen (SyRS-95), zwei Versanddienstleister (SyRS-96), drei
|
||||
Großhändler-/Handelspool-Anbindungen (SyRS-98) - im Zielsystem jeweils über austauschbare Provider
|
||||
hinter einer gemeinsamen Schnittstelle zu konsolidieren.
|
||||
5. **Getrennte Rechtemodelle für Desktop (`AppRightsBL`) und mobilen Zugriff (`WebRightNode`)**
|
||||
(SyRS-100/SwRS-22) ohne in dieser Iteration nachgewiesenen Synchronisationsmechanismus - Risiko
|
||||
auseinanderlaufender Berechtigungen zwischen den Kanälen.
|
||||
6. **Lizenzprüfung durchgängig dupliziert statt zentralisiert** (SwRS-18, vgl. SwRS-10) - das Muster
|
||||
„Prüfung am Anfang jeder Methode" wiederholt sich in mehreren Klassen und ist fehleranfällig bei
|
||||
künftigen Erweiterungen.
|
||||
|
||||
**Bekannte Lücken/Grenzen dieser Iteration:**
|
||||
- Kein exhaustiver N²-Paarvergleich aller 170 Anforderungen auf inhaltliche Deckungsgleichheit; die 30
|
||||
identifizierten Konsolidierungskandidaten entstanden aus der inhaltlichen Analyse während der
|
||||
Erstellung, nicht aus einem systematischen Nachlauf.
|
||||
- Bei den 25 „flach" eingestuften Modulen wurde die Suche nach einer durchsetzenden Backend-Klasse
|
||||
jeweils auf 1-2 gezielte Codesuchen begrenzt; eine erschöpfende Suche (z. B. über alle
|
||||
`AppSettingsConst`-Verwendungsstellen) war im Zeitrahmen dieser Iteration nicht möglich.
|
||||
- Datenbankschema-Constraints wurden nur stichprobenartig (ein Mapping, `BankAccountMaps`, in SwRS-1)
|
||||
ausgewertet, nicht systematisch für alle 120 Module - eine Folgeiteration könnte gezielt
|
||||
NHibernate-Mappings für die risikorelevanten Module vollständig auswerten.
|
||||
- Docker-/Deployment-Konfigurationsdateien (`docker-compose.yml`, Dockerfiles) wurden nur auf
|
||||
Verzeichnisebene, nicht inhaltlich (z. B. auf offene Ports, Standardpasswörter) ausgewertet - für eine
|
||||
Sicherheitsbetrachtung des Betriebs wäre dies ein sinnvoller Vertiefungspunkt.
|
||||
- Die Web-/Mobile-Rechtetrennung (SyRS-100/SwRS-22) und die SQL-Diagnosefunktionen ohne sichtbare
|
||||
Rechteprüfung (SyRS-65/SwRS-19) sind als Hypothesen geführt, weil die aufrufende UI-/WebService-Schicht
|
||||
nicht mitanalysiert wurde - eine gezielte Prüfung dieser beiden Punkte wird für eine Folgeiteration
|
||||
empfohlen, da beide echte Sicherheitsrisiken darstellen könnten.
|
||||
- Riverbird (SyRS-4) und der Zusammenhang zu RiverDivo (SyRS-98) wurden nicht abschließend geklärt.
|
||||
|
||||
**Empfehlung für eine Folge-Iteration:** Vorrangig (1) Klärung der DSGVO-Löschfunktion mit dem
|
||||
Fachbereich, (2) gezielte Prüfung der beiden identifizierten Sicherheitslücken (SQL-Diagnosefunktionen
|
||||
ohne sichtbare Rechteprüfung, getrennte Rechtemodelle Desktop/Mobile), (3) Vertiefung der 25 „flach"
|
||||
eingestuften, überwiegend administrativen Konfigurationsmodule mit einer systematischen Suche über die
|
||||
`AppSettings`-Infrastruktur, und (4) ein gezielter Konsolidierungs-Review über die 30 bereits
|
||||
identifizierten Kandidaten hinaus.
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
# Glossar — c-entron ERP-Suite
|
||||
|
||||
Domänenbegriffe, wie sie in den Anforderungen (StRS/SyRS/SwRS) verwendet werden. Technische Bezeichner
|
||||
(Klassen, Methoden, Spalten) sind im Original belassen; hier wird nur ihre fachliche Bedeutung erklärt.
|
||||
|
||||
| Begriff | Bedeutung im Kontext von c-entron |
|
||||
|---|---|
|
||||
| **Anforderungsebenen** | |
|
||||
| StRS | Stakeholder Requirements Specification - fachliche Sicht (Geschäftsziele, Akteure) nach ISO/IEC/IEEE 29148. |
|
||||
| SyRS | System Requirements Specification - Systemverhalten, Schnittstellen, Qualitätsanforderungen. |
|
||||
| SwRS | Software Requirements Specification - Komponenten, Datenmodelle, software-interne Regeln. |
|
||||
| PRIMÄR / SEKUNDÄR / KONTEXT | Belegklassifikation: PRIMÄR = durchgesetzte Regel im Code/DB-Constraint; SEKUNDÄR = UI-Label, Fehlermeldung, Konfiguration; KONTEXT = Kommentar/Commit/Ticketreferenz ohne Durchsetzungscharakter. |
|
||||
| **Fachbegriffe der Codebasis** | |
|
||||
| Mandant | Eine eigenständige Kundeninstanz innerhalb derselben c-entron-Installation (Multi-Tenant); verwaltet über `MandatorBL`. Nicht zu verwechseln mit „Kunde" (Endkunde des Mandanten). |
|
||||
| Stammblatt | In dieser Codebasis speziell für Drucker verwendete Bezeichnung der Netzwerkkomponenten-Dokumentation (`NetworkComponentDataPrinter`), fachlich eine Teilmenge dessen, was im Zielsystem als „Asset" geführt werden soll (siehe Konsolidierungsbeispiel SyRS-114). |
|
||||
| Asset | Im DocuBoard-Kontext (`AssetManagementArticleAssignmentBL`) verwaltete Hardware außer Druckern (z. B. Notebooks, Server). Im Zielsystem soll der Begriff „Asset" beide Konzepte (Stammblätter und bisherige Assets) vereinheitlichen. |
|
||||
| Opos | Offene Posten - noch nicht ausgeglichene Forderungen/Verbindlichkeiten gegenüber Kunden/Lieferanten. |
|
||||
| Mahnlauf / Mahnstufe | Automatisierter Lauf, der überfällige Rechnungen identifiziert und stufenweise (Level1-Level3) eskaliert (`DunningRunBL`). |
|
||||
| Beleg (Finanzbeleg) | Sammelbegriff für Rechnung, Gutschrift, Lieferschein u. ä. im Rechnungswesen (`Receipt`-Klassenfamilie); nicht zu verwechseln mit „Beleg" im Sinne des Prompts (Artefaktnachweis für eine Anforderung) - im Anforderungstext wird Letzteres stets als „Artefaktbeleg" bezeichnet. |
|
||||
| Sammelrechnung | Eine Rechnung, die mehrere Verträge/Leistungen eines Kunden in einem Beleg zusammenfasst (`AutomaticFacturaBL`, Parameter `isCollectiveInvoice`). |
|
||||
| Fakturierung / Factura | Rechnungsstellung; in der Codebasis unter dem Begriff „Factura" (`AutomaticFacturaBL`) statt „Billing" geführt - Terminologie zwischen UI („AutomatedBilling") und Backend („Factura") weicht ab. |
|
||||
| Flatrate | Pauschalpreismodell für Verträge, bei dem ein Freikontingent zzgl. Staffelpreisen für Mehrverbrauch abgerechnet wird (`FlatRateProjectAppModuleController`, `GetCounterFreeCount`, `GetCounterScalePrices`). |
|
||||
| Klickzähler / DeviceClickCounter | Nutzungsbasierte Zählerstände (typischerweise Kopierer/Drucker), die zur Abrechnung von Verbrauchskosten dienen. |
|
||||
| Kommissionierung | Der Prozess, bei dem Artikel für einen Auftrag aus dem Lager zusammengestellt werden (`CommissioningBL`). |
|
||||
| Konsignation | Lagerform, bei der Ware im Lager des Kunden/Partners liegt, aber im Eigentum des Lieferanten verbleibt, bis sie verbraucht/verkauft wird (`ConsignmentCompleted`-Filter in `CommissioningBL`). |
|
||||
| Nebenlager | Ein zusätzliches, dem Hauptlager nachgeordnetes Lager mit eigenem Mindestbestand (`NLA`-Tabelle in `OrderSuggestionListBL`). |
|
||||
| Mindestbestand | Konfigurierter Schwellwert je Artikel und Lagerort, unterhalb dessen ein Bestellvorschlag ausgelöst wird. |
|
||||
| RMA | Return Merchandise Authorization - autorisierte Warenrücksendung, mehrstufig als Anlage/Rückversand/Weiterversand geführt. |
|
||||
| EDI | Electronic Data Interchange - elektronischer, strukturierter Datenaustausch von Bestellungen mit Lieferanten/Distributoren (z. B. Opentrans21-Format). |
|
||||
| Distributor | Großhändler/Vorlieferant, bei dem Artikel elektronisch (EDI) oder über Handelspool-Plattformen (TradePool, RiverDivo, CPra) bestellt werden. |
|
||||
| DSGVO | Datenschutz-Grundverordnung (EU) - in der Codebasis eigene BL-Domäne `DataSecurityBL`/`Documents/Dsgvo`, die u. a. Löschanträge (Recht auf Löschung, Art. 17) und SEPA-Mandatsvorlagen verwaltet. |
|
||||
| SEPA-Mandat | Vom Kunden erteilte Einwilligung zum Lastschrifteinzug (Single Euro Payments Area); Vorlagen und Verträge werden softwareseitig als Teil der DSGVO-Dokumentenverwaltung geführt (siehe SwRS-12). |
|
||||
| PAIN.008 | ISO-20022-Nachrichtenformat für SEPA-Lastschriften; die Codebasis unterstützt mehrere Versionen inkl. einer deutschen „GBIC"-Sonderform. |
|
||||
| AIS-Consent | Account Information Service Consent - die im Rahmen von PSD2 vom Kontoinhaber erteilte Einwilligung, dass ein Drittanbieter (hier: FinAPI) Kontoinformationen abrufen darf. |
|
||||
| eBInterface | Österreichischer Standard für elektronische Rechnungen (E-Rechnung). |
|
||||
| ZUGFeRD | Deutscher Hybridstandard für elektronische Rechnungen (PDF mit eingebetteter strukturierter XML). |
|
||||
| Selfcare | Vom Endkunden selbst bedienbares Portal/Formular, um Anliegen ohne direkten Mitarbeiterkontakt zu erfassen (`SelfCareBL`). |
|
||||
| Ticket | Ein erfasster Kundenvorgang/-anliegen im Helpdesk-Kontext, mit eigenem Bearbeitungsprozess (`TicketProcessBL`) getrennt von den Ticket-Stammdaten. |
|
||||
| Erwartetes Ereignis (Expected Event) | Ein für ein Kundenkonto erwarteter, terminierter Vorgang (z. B. Rückruf, Wartungsfenster), dessen Nichteintreten überwacht wird - Grundlage der SLA-Überwachung. |
|
||||
| SLA | Service Level Agreement - vertraglich vereinbarte Reaktions-/Bearbeitungsfristen, in der Codebasis über „ExpectedEvents" und „EscalationsSettings" abgebildet. |
|
||||
| TAPI | Telephony Application Programming Interface - Windows-Schnittstelle zur Steuerung von Telefonanlagen, genutzt für Anrufsteuerung/Screen-Pop. |
|
||||
| CentronNexus | Der mobile/webbasierte Anwendungsteil (Ticket-/Fertigungsauftragsverwaltung, Outlook-Add-in), unabhängig vom WPF-Desktop-Client. |
|
||||
| Web-Recht (WebRightNode) | Ein von den Desktop-Rechten (`AppRightsBL`) getrenntes, baumstrukturiertes Berechtigungsmodell für den CentronNexus-Zugriff. |
|
||||
| DocuFORM | Externer Dienst zur Dokumenten-/Formularerstellung und zum Import von Zählerdaten. |
|
||||
| DIVE | Plattform der Deutschen Telekom zum Datenaustausch mit Partnern; in der Codebasis als „TelekomDive" integriert. |
|
||||
| RiverDivo / TradePool / CPra | Drei unabhängige, strukturell ähnliche Anbindungen an Großhändler-/Handelspool-Plattformen zur Preis-/Verfügbarkeitsabfrage. |
|
||||
| Riverbird | Im Code als externe Datenquelle für den Sonderartikel-Import erwähnt (`ReadRiverbirdServerDialogView`); genauer fachlicher Zusammenhang zu RiverDivo nicht abschließend geklärt (siehe Hypothesen.md-Hinweis in SyRS-4). |
|
||||
| Change-Tracking | Automatisierte, auf ORM-Ebene (NHibernate-Event-Listener) realisierte Protokollierung von Datenänderungen zu Revisionszwecken. |
|
||||
| I3D | In der Codebasis durchgängig verwendetes Suffix/Namensmuster für den technischen Primärschlüssel einer Entität (z. B. `customerI3D`, `articleI3D`) - vermutlich historisch aus einer internen ID-Bezeichnung abgeleitet, nicht abschließend geklärt. |
|
||||
| BL / DAO | Business Logic (fachliche Regeln, Namensmuster `*BL.cs`) bzw. Data Access Object (Datenzugriffsschicht, NHibernate-Mappings) - die beiden zentralen Architekturschichten des Backends. |
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
# Hypothesen — c-entron ERP-Suite
|
||||
|
||||
Diese Datei enthält **ausschließlich** die Anforderungen, die in `StRS.md`, `SyRS.md` oder `SwRS.md`
|
||||
mit `[HYPOTHESE]` markiert sind (Feld `Konsolidierung` und/oder `Übernahmewürdigkeit`, in zwei Fällen
|
||||
auch das Feld `Status`). Sie ist deckungsgleich mit den Inline-Markierungen: 24 Anforderungen (14 aus
|
||||
SyRS, 10 aus SwRS) tragen mindestens eine `[HYPOTHESE]`-Kennzeichnung. Offene Punkte ohne Bezug zu
|
||||
einer konkreten Anforderungs-ID stehen stattdessen in der Selbstbewertung (`Analysebericht.md`).
|
||||
|
||||
Zu jeder Hypothese: die betroffene Anforderung, die konkrete offene Frage und welche Information zur
|
||||
Bestätigung fehlt.
|
||||
|
||||
| ID | Titel | Offene Frage | Fehlende Information zur Bestätigung |
|
||||
|---|---|---|---|
|
||||
| SyRS-18 | Finanzielle Betrachtung des Produktlebenszyklus | Überschneidet sich `Finances/ProductLifecycleManagement` (M018) inhaltlich mit `Modules/PLM` (M043)? | Tiefergehende Codeanalyse beider UI-Module; **Anmerkung:** wird in SyRS-43 durch den Fund derselben Backend-Klasse (`ProductLifecycleBL`) weitgehend aufgelöst. |
|
||||
| SyRS-23 | SEPA-Lastschriftmandate | Ist die technische Ansiedlung der SEPA-Mandatsverwaltung unter der DSGVO-BL-Domäne (`_dsgvoBL`) eine bewusste fachliche Entscheidung (Mandate als datenschutzrelevante Dokumente) oder historisch gewachsen? | Interview mit dem Entwicklungsteam bzw. Commit-Historie zur Klasse `DataSecurityBL`/`SepaContractWebServiceBL`. |
|
||||
| SyRS-24 | Reisekostenerfassung im Einkaufskontext | Wo liegt die durchsetzende Backend-Regel für Reisekostenerfassung (`Purchasing/TravelExpense`)? Im durchsuchten `Centron.BL` wurde keine eigenständige Klasse gefunden. | Gezielte Suche nach der tatsächlich aufgerufenen BL-Klasse (ggf. unter `Buying` oder einer generischen Beleg-Klasse) oder Bestätigung, dass die Logik überwiegend UI-seitig liegt. |
|
||||
| SyRS-31 | Mengeneinheiten mit Umrechnungsfaktor | Wird das Feld `FactorToSeconds` korrekt für rein mengenbasierte (nicht zeitbasierte) Artikeleinheiten verwendet, oder ist es ein Feldname-Erbe aus einer ursprünglich zeitbasierten Verwendung? | Rücksprache mit dem Fachbereich/Entwicklungsteam zur historischen Herkunft des Feldes; Prüfung aller Verwendungsstellen. |
|
||||
| SyRS-37 | Verbuchung von Ausgangszahlungen im Lagerkontext | Wie grenzt sich `Warehousing/OutcomingPayments` fachlich von `Finances/Payments` (SyRS-14) ab? Kein eindeutiger Backend-Beleg gefunden. | Fachliche Abgrenzung durch den Fachbereich; Identifikation der tatsächlich aufgerufenen Backend-Klasse. |
|
||||
| SyRS-44 | Qualitätsprüfung über konfigurierbare Gründe | Besteht ein fachlicher Zusammenhang zwischen `QM/Settings/AssetReasonSettings` und der Asset-Verwaltung (M114, DocuBoard) über den gemeinsamen Begriff „AssetReason"? | Tiefere Analyse, ob `AssetReasonSettings` dieselben Asset-Datensätze referenziert wie `AssetManagementArticleAssignmentBL`. |
|
||||
| SyRS-52 | Verwaltung von Service- und Leasingverträgen | Ist `Administration/ServiceAndLeasing` eine eigenständige Domäne oder Teil der allgemeinen `ContractBL` (SyRS-16)? Kein eigener Backend-Namespace gefunden. | Identifikation der tatsächlich aufgerufenen Backend-Klasse für Service-/Leasingverträge. |
|
||||
| SyRS-65 | Administrative Einsicht in SQL-Ausführung | Ist der Zugriff auf `SQLManagementBL`-Funktionen (SQL-Historie, Backups, blockierende Prozesse) zuverlässig auf Administratoren beschränkt? Im untersuchten Methodenkörper ist keine Rechteprüfung sichtbar. | Prüfung, ob die Absicherung auf UI-Ebene (Menüsichtbarkeit) oder WebService-Autorisierungsfilter erfolgt; siehe auch SwRS-19. |
|
||||
| SyRS-66 | DSGVO-Löschfunktion für Kontaktdaten | Wird die DSGVO-Löschung für Kunde/Lieferant/Konto/ContactManagement-Kontakt (aktuell `NotImplementedException`) über einen anderen, nicht analysierten Weg (z. B. manuelles SQL-Skript außerhalb der Anwendung) tatsächlich durchgeführt? | Rücksprache mit dem Fachbereich/Betrieb, ob und wie DSGVO-Löschanträge für diese vier Objekttypen aktuell praktisch abgewickelt werden. **Höchste Priorität** - siehe Analysebericht.md, Risikoliste. |
|
||||
| SyRS-80 | Externe Helpdesk-Anbindung | Ist die Synchronisation mit dem externen Helpdesk-System (`ExternalHelpdeskConfigurationBL`) bidirektional oder nur Import? | Einsicht in den tatsächlichen Synchronisationslauf/-dienst, der die Konfiguration konsumiert (in dieser Iteration nicht lokalisiert). |
|
||||
| SyRS-93 | Generisches Integrationsframework | Welchen konkreten Funktionsumfang bietet `Centron.BL/Integrations` (Authentifizierung? Fehlerbehandlung? Beides)? | Tiefere Analyse der Klassen unterhalb von `Centron.BL/Integrations`, die in dieser Iteration nicht im Detail gelesen wurden. |
|
||||
| SyRS-100 | Web-Rechte für mobilen Zugriff | Findet eine Synchronisation zwischen den Desktop-Rechten (`AppRightsBL`) und den Web-Rechten (`WebRightNode`) statt? | Identifikation eines Synchronisationsmechanismus/-dienstes zwischen beiden Rechtemodellen; siehe auch SwRS-22. |
|
||||
| SyRS-109 | Erfassung von System- und Nutzungstelemetrie | Ist die Telemetrieerfassung (`TelemetryBL`) datenschutzkonform (Personenbezug der erfassten Daten)? | Analyse der konkret erfassten Telemetriefelder und Abgleich mit DSGVO-Anforderungen. |
|
||||
| SwRS-3 | Deaktivierte DSGVO-Löschroutinen | Siehe SyRS-66 - identische Hypothese auf Software-Ebene, zusätzlich: Ist die auskommentierte SQL-Logik in `DataSecurityBL` noch aktuell oder veraltet? | Code-Review mit dem ursprünglichen Autor/Commit-Historie der betroffenen Methoden. |
|
||||
| SwRS-4 | Opos-Zugriff über Dunning-Rechtekonstante | Ist die gemeinsame Nutzung der Rechtekonstante `Controlling.Finances.Dunning` für Opos und Mahnwesen eine bewusste fachliche Zusammenlegung oder eine zu behebende Ungenauigkeit? | Rücksprache mit dem Fachbereich zur gewünschten Granularität der Rechtevergabe. |
|
||||
| SwRS-7 | Schutz der Administratorengruppe | Wirkt der Löschschutz der Administratorengruppe namens- oder ID-basiert? Eine Umbenennung der Gruppe könnte den Schutz ggf. umgehen. | Einsicht in die exakte Vergleichslogik innerhalb von `DeleteRightGroup` (in dieser Iteration nur die Fehlermeldung, nicht die Vergleichsbedingung selbst gelesen). |
|
||||
| SwRS-9 | Zwei-Faktor-PIN-Validierung | Stellen die unterschiedlichen Fehlermeldungen bei fehlendem 2FA-Schlüssel vs. falscher PIN ein reales Sicherheitsrisiko (User-Enumeration) dar, gegeben dass es sich um einen internen Mitarbeiter-Login handelt? | Bewertung durch Sicherheitsexperten im Kontext des tatsächlichen Bedrohungsmodells (rein internes System vs. auch extern erreichbar). |
|
||||
| SwRS-19 | Fehlende sichtbare Rechteprüfung SQLManagementBL | Siehe SyRS-65 - erfolgt die Absicherung auf einer höheren Ebene (UI-Menüsichtbarkeit, WebService-Autorisierungsfilter), die in dieser Iteration nicht mitanalysiert wurde? | Analyse der aufrufenden UI-/WebService-Schicht von `SQLManagementBL` und ggf. vorhandener Autorisierungsfilter/-attribute. |
|
||||
| SwRS-22 | Getrennte Rechtebäume Desktop/Mobile | Siehe SyRS-100 - existiert ein Synchronisationsmechanismus zwischen `AppRightsBL` und `WebRightNode`? | Identifikation eines etwaigen Synchronisationsdienstes oder Bestätigung, dass beide Rechtemodelle unabhängig gepflegt werden müssen. |
|
||||
| SwRS-23 | Best-Effort statt Transaktion bei Massenupdates | Ist Best-Effort-Verarbeitung (statt All-or-Nothing-Transaktion) bei Massenänderungen fachlich gewünscht? | Rücksprache mit dem Fachbereich zum gewünschten Fehlerverhalten bei Teilfehlern in Massenläufen. |
|
||||
| SwRS-25 | Feldname `FactorToSeconds` | Siehe SyRS-31 - wird das Feld ausschließlich für Zeiteinheiten oder auch für andere physische Mengeneinheiten verwendet? | Codesuche über alle Verwendungsstellen von `FactorToSeconds` außerhalb der hier untersuchten Klasse. |
|
||||
| SwRS-27 | Barcode-Zuordnung als Check-then-Act | Verhindert eine Transaktionsisolation auf Datenbankebene die theoretisch mögliche Race Condition bei gleichzeitiger Barcode-Zuordnung? | Einsicht in die Transaktionskonfiguration (Isolation Level) der aufrufenden Schicht, die in dieser Iteration nicht analysiert wurde. |
|
||||
| SwRS-29 | Feste Obergrenze von acht Mandanten-Logos | Ist die hartkodierte Obergrenze von acht Logos je Mandant fachlich ausreichend (z. B. für Mandanten mit mehreren Marken)? | Rücksprache mit dem Fachbereich/Vertrieb zu tatsächlich beobachteten Mandantenkonfigurationen mit mehr als acht Marken/Logos. |
|
||||
| SyRS-120 | Technische Basisbibliotheken & Systemstart | Das Modul wurde im Inventar als sicherheitsrelevant eingestuft (Lizenzprüfung), der vorliegende Beleg ist jedoch nur SEKUNDÄR; die konkrete Lizenzdurchsetzung liegt PRIMÄR belegt auf Fachmodul-Ebene (SyRS-41/SwRS-18), nicht in der Startsequenz selbst. | Identifikation einer etwaigen zentralen, in der Startsequenz verankerten Lizenz-/Sicherheitsprüfung (falls vorhanden) oder Bestätigung, dass die Prüfung tatsächlich ausschließlich dezentral je Fachmodul erfolgt. |
|
||||
|
||||
## Hinweis zur Anzahl
|
||||
|
||||
24 von 150 Anforderungen (120 SyRS + 30 SwRS; StRS enthält keine Hypothesen, da auf dieser Ebene
|
||||
ausschließlich mit breiter Belegbasis - mehrere Module/Dateien je Anforderung - argumentiert wurde) sind
|
||||
als Hypothese markiert, das entspricht rund 16,0 %. Das ist plausibel für eine Codebasis dieser Größe:
|
||||
Die überwiegende Mehrheit der Hypothesen betrifft nicht die Existenz einer Funktion (diese ist jeweils
|
||||
durch mindestens einen Beleg gesichert, Status bleibt `belegt`), sondern eine **Einordnungsfrage**
|
||||
(Konsolidierungskandidat? Übernahmewürdigkeit im Detail?), für deren abschließende Beantwortung
|
||||
Fachwissen oder eine tiefere Analyse über den Rahmen dieser Iteration hinaus nötig wäre. Die einzige
|
||||
Hypothese mit unmittelbarer Risikorelevanz für den Kernauftrag ist SyRS-66/SwRS-3 (DSGVO-Löschfunktion).
|
||||
+521
@@ -0,0 +1,521 @@
|
||||
# Stakeholder Requirements Specification (StRS) — c-entron ERP-Suite
|
||||
|
||||
ISO/IEC/IEEE 29148:2018. Fachliche Sicht: Akteure, Geschäftsziele, Stakeholder-Bedürfnisse.
|
||||
Jede StRS-Anforderung bündelt einen fachlichen Bereich (siehe Modulinventar in `Analysebericht.md`)
|
||||
und dient als Bezugspunkt für die darunterliegenden SyRS-/SwRS-Anforderungen (Tracelinks).
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
ID: StRS-1
|
||||
Titel: Vertriebsprozesse durchgängig digital abwickeln
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsmitarbeiter, Kunde, Vertriebsleitung
|
||||
Vorbedingung: Kundenstamm und Artikelstamm sind gepflegt.
|
||||
Fakt: Eigenständige BL-Domänen für Angebote/Aufträge (Sales/CustomerAssets/Offers, /Orders),
|
||||
Produktkonfiguration (ProductMatrix) und Kunden-Mailings (Mailings) sowie ein
|
||||
getrennter Geschäftspartnerstamm (BusinessPartner, Accounts, CustomerArea).
|
||||
Aussage: Das System soll Vertriebsmitarbeitern ermöglichen, Angebote zu erstellen, in Aufträge zu
|
||||
überführen, produktspezifische Konfigurationen (Produktmatrix) zu berücksichtigen und
|
||||
Kunden gezielt per Mailing anzusprechen, auf Basis eines gemeinsamen Geschäftspartnerstamms.
|
||||
Ergebnis: Ein durchgängiger Vertriebsprozess von der Kundenansprache bis zum Auftrag ist ohne
|
||||
Systembruch möglich.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/Offers/OfferBL.cs, OrderBL.cs - Begründung:
|
||||
eigenständige BL-Klassen für Angebots- und Auftragsverwaltung mit Statusübergängen.
|
||||
- [SEKUNDÄR] src/backend/Centron.BL/ProductMatrix/ProductMatrixBL.cs - Begründung: eigene fachliche
|
||||
Domäne zur produktspezifischen Konfiguration im Vertriebskontext.
|
||||
- [KONTEXT] src/backend/Centron.BL/BusinessPartner/*, Centron.BL/Accounts/* - Begründung: zeigt, dass
|
||||
Vertriebsprozesse auf einem gemeinsamen Partnerstamm aufsetzen.
|
||||
Prüfidee: Ein Angebot lässt sich anlegen, in einen Auftrag überführen und referenziert denselben
|
||||
Geschäftspartner-Datensatz wie das Ausgangsangebot.
|
||||
Tracelinks: SyRS-1, SyRS-2, SyRS-3, SyRS-4, SyRS-5, SyRS-6, SyRS-7
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kernprozess jedes ERP-Systems, fachlich weiterhin erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-2
|
||||
Titel: Wiederkehrende und einmalige Leistungen korrekt und nachvollziehbar abrechnen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Finanzbuchhaltung, Vertriebsleitung, Kunde
|
||||
Vorbedingung: Verträge, Zeiterfassungen bzw. Zählerstände liegen vor.
|
||||
Fakt: Getrennte BL-/UI-Module für automatisierte Fakturierung, Flatrate-Abrechnung,
|
||||
Zeitabrechnung, Geräte-/Zählerabrechnung und einen zentralen Buchhaltungskern
|
||||
(Finances/AutomatedBilling, FlatrateBilling, TimerBilling, DeviceClickCounter,
|
||||
Centron.BL/Accounting).
|
||||
Aussage: Das System soll wiederkehrende (Flatrate, Zeit, Zähler) und einmalige Leistungen
|
||||
automatisiert und regelbasiert in Rechnungen überführen, die auf dem zentralen
|
||||
Buchhaltungskern aufsetzen.
|
||||
Ergebnis: Für jede abrechenbare Leistung entsteht ein korrekt zugeordneter, nachvollziehbarer
|
||||
Finanzbeleg.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Finances/AutomatedBilling,
|
||||
src/backend/Centron.BL/Accounting - Begründung: getrennte, aber zusammenwirkende
|
||||
Domänen für Abrechnungssteuerung und Buchhaltungskern.
|
||||
Prüfidee: Für einen Vertrag mit Flatrate-Komponente und Zusatzleistung wird bei Ausführung des
|
||||
Abrechnungslaufs genau ein konsistenter Rechnungsbeleg erzeugt.
|
||||
Tracelinks: SyRS-8, SyRS-9, SyRS-10, SyRS-11, SyRS-15, SyRS-17, SyRS-18, SyRS-19, SyRS-20, SyRS-22
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Abrechnung ist Kernnutzen eines ERP für den Betreiber.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-3
|
||||
Titel: Zahlungseingänge, Mahnwesen und Zahlungsverkehr steuern
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Finanzbuchhaltung, Debitorenbuchhaltung
|
||||
Vorbedingung: Offene Rechnungen und Kontoinformationen liegen vor.
|
||||
Fakt: Eigenständige Module für offene Posten (Opos), Mahnwesen (Dunning), Zahlungsverkehr
|
||||
(Payments/Transactions), Gutscheine (VoucherManagement) und SEPA-Mandate (SepaContract).
|
||||
Aussage: Das System soll offene Forderungen überwachen, automatisiert Mahnstufen auslösen und
|
||||
Zahlungseingänge (inkl. SEPA-Lastschrift und Gutscheineinlösung) korrekt verbuchen.
|
||||
Ergebnis: Zahlungsrückstände werden zeitnah erkannt und eskaliert; Zahlungseingänge sind den
|
||||
richtigen offenen Posten zugeordnet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Finances/Dunning,
|
||||
src/centron/Centron.WPF.UI/Modules/Finances/Opos - Begründung: eigenständige,
|
||||
fachlich benannte Module für Mahnwesen und offene Posten.
|
||||
Prüfidee: Eine überfällige Rechnung löst nach Ablauf der konfigurierten Frist eine Mahnstufe aus.
|
||||
Tracelinks: SyRS-12, SyRS-13, SyRS-14, SyRS-16, SyRS-21, SyRS-23
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - gesetzlich/wirtschaftlich notwendiger Kernprozess.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-4
|
||||
Titel: Einkauf und Lieferantenbeziehungen effizient steuern
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Einkäufer, Lieferant
|
||||
Vorbedingung: Artikelstamm und Lieferantenstamm sind gepflegt.
|
||||
Fakt: Eigene Module für Bestellwesen, EDI-Anbindung an Lieferanten und automatisierte
|
||||
Bestellvorschläge (Purchasing, EDIManagement, OrderSuggestionList).
|
||||
Aussage: Das System soll Bestellungen bei Lieferanten sowohl manuell als auch elektronisch (EDI)
|
||||
abwickeln und Nachbestellbedarf automatisiert vorschlagen.
|
||||
Ergebnis: Lagerbestände werden rechtzeitig nachbestellt; elektronische Bestellungen werden ohne
|
||||
Medienbruch an angebundene Lieferanten übermittelt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/EDI/* (Alltron, ALSO, Komsa, EGIS, Concerto, Opentrans21) -
|
||||
Begründung: konkrete, lieferantenspezifische EDI-Order-Klassen belegen aktive
|
||||
elektronische Bestellabwicklung.
|
||||
Prüfidee: Ein Artikel unter Mindestbestand erscheint auf der Bestellvorschlagsliste.
|
||||
Tracelinks: SyRS-24, SyRS-25, SyRS-26, SyRS-27
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kernprozess der Warenwirtschaft.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-5
|
||||
Titel: Warenbestand, Kommissionierung und Versand steuern
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lagermitarbeiter, Versandmitarbeiter
|
||||
Vorbedingung: Artikelstamm ist gepflegt, Aufträge liegen vor.
|
||||
Fakt: Umfangreiches Warehousing-Modul mit elf fachlichen Unterbereichen (Artikelverwaltung,
|
||||
-import, Mengeneinheiten, Barcode, Kommissionierung, Inventur, Warengruppen,
|
||||
Kontensysteme, Ausgangszahlungen, Artikel-/Lieferantensuche) sowie separates
|
||||
Logistic-Modul für den Versand.
|
||||
Aussage: Das System soll den gesamten Warenfluss vom Wareneingang über Kommissionierung und
|
||||
Inventur bis zum Versand abbilden und dabei Artikel eindeutig (u. a. per Barcode)
|
||||
identifizieren.
|
||||
Ergebnis: Lagerbestände sind jederzeit aktuell und nachvollziehbar; Aufträge werden korrekt
|
||||
kommissioniert und versendet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Warehousing/* (elf Unterordner) - Begründung: breite,
|
||||
fachlich klar benannte Aufteilung belegt vollständigen Warenwirtschaftsprozess.
|
||||
Prüfidee: Nach Abschluss der Kommissionierung eines Auftrags ist der Lagerbestand um die
|
||||
kommissionierte Menge reduziert.
|
||||
Tracelinks: SyRS-28 bis SyRS-39
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kernprozess der Warenwirtschaft.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-6
|
||||
Titel: Warenrücksendungen (RMA) nachvollziehbar bearbeiten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Kunde, Serviceabteilung
|
||||
Vorbedingung: Ursprünglicher Auftrag/Artikel ist im System erfasst.
|
||||
Fakt: Eigenständiges RMA-Modul mit Teilprozessen NewRma, SendBack, SendForth und RmaSettings.
|
||||
Aussage: Das System soll Warenrücksendungen von der Meldung über den Rückversand bis zum
|
||||
Ersatz-/Reparaturversand nachvollziehbar abbilden.
|
||||
Ergebnis: Jede Rücksendung ist eindeutig einem RMA-Vorgang mit Status zugeordnet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Rma/NewRma, SendBack, SendForth - Begründung: getrennte
|
||||
Prozessschritte als eigene fachliche Unterordner belegen einen mehrstufigen RMA-Workflow.
|
||||
Prüfidee: Ein RMA-Vorgang durchläuft die Stationen Anlage → Rückversand → (Ersatz-)Versand mit
|
||||
jeweils dokumentiertem Status.
|
||||
Tracelinks: SyRS-40
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - kundenrelevanter Serviceprozess.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-7
|
||||
Titel: Fertigung und Produktqualität steuern
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Produktionsplaner, Qualitätsmanager
|
||||
Vorbedingung: Stücklisten/Maschinenstammdaten sind gepflegt.
|
||||
Fakt: Eigene Module Production (MachineManagement, ProductionOrder), PLM und QM.
|
||||
Aussage: Das System soll Fertigungsaufträge auf Basis von Maschinenstammdaten steuern und die
|
||||
Produktqualität über definierte QM-Prüfungen sichern.
|
||||
Ergebnis: Fertigungsaufträge sind Maschinen zugeordnet, Qualitätsprüfungen sind dokumentiert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Production/MachineManagement, ProductionOrder,
|
||||
Modules/QM - Begründung: eigenständige Module belegen Fertigungs- und QM-Prozesse.
|
||||
Prüfidee: Ein Fertigungsauftrag lässt sich einer Maschine zuordnen und mit Statuswechsel
|
||||
abschließen.
|
||||
Tracelinks: SyRS-41, SyRS-42, SyRS-43, SyRS-44
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - für produzierende Mandanten fachlich erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-8
|
||||
Titel: Kundenprojekte planen und wirtschaftlich steuern
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Projektleiter, Kostenstellenverantwortlicher
|
||||
Vorbedingung: Projekt ist angelegt, Zahler/Kostenstellen sind definiert.
|
||||
Fakt: Module ProjectManagement, ProjectPriceImport, Massenupdates und PayersAndCostCenter.
|
||||
Aussage: Das System soll Projekte planen, Projektpreislisten importieren, Massenänderungen an
|
||||
Projektdaten kontrolliert durchführen und Kosten Zahlern/Kostenstellen zuordnen.
|
||||
Ergebnis: Projekte sind wirtschaftlich auswertbar und Kosten sind eindeutig zugeordnet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ProjectManagement, ProjectPriceImport,
|
||||
PayersAndCostCenter - Begründung: eigenständige fachliche Module belegen den Prozess.
|
||||
Prüfidee: Ein Massenupdate auf Projektdaten protokolliert die geänderten Datensätze.
|
||||
Tracelinks: SyRS-45, SyRS-46, SyRS-47, SyRS-48
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - projektbasierte Mandanten benötigen diese Steuerung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-9
|
||||
Titel: System mandantenfähig, konfigurierbar und administrierbar betreiben
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Systemadministrator
|
||||
Vorbedingung: Installation ist abgeschlossen.
|
||||
Fakt: 20 Unterbereiche im Modul Administration (Mandanten-, Mitarbeiter-, Länderverwaltung,
|
||||
Vertrags-/Belegkonditionen, technische Systemkonfiguration u. v. m.).
|
||||
Aussage: Das System soll Administratoren erlauben, Mandanten, Mitarbeiter, Stammdaten und
|
||||
technische Verbindungen zentral zu konfigurieren, ohne den Quellcode zu ändern.
|
||||
Ergebnis: Betriebsparameter sind über die Administration konfigurierbar und wirken sich unmittelbar
|
||||
auf die Fachmodule aus.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Administration/* (20 Unterordner) - Begründung: breite,
|
||||
fachlich benannte Konfigurationsoberflächen belegen zentrale Administrierbarkeit.
|
||||
Prüfidee: Eine in der Mandantenverwaltung angelegte Mandanten-ID ist in den Fachmodulen als
|
||||
Auswahlwert verfügbar.
|
||||
Tracelinks: SyRS-49 bis SyRS-68
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - notwendige Betriebsvoraussetzung für Multi-Mandanten-Betrieb.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-10
|
||||
Titel: Zugriff auf Daten und Funktionen nach Berechtigung und Authentizität steuern
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Systemadministrator, alle Benutzer
|
||||
Vorbedingung: Benutzerkonten sind angelegt.
|
||||
Fakt: Eigenständige Module RightsManagement, Centron.BL/Security, TwoFactorAuthenticator und
|
||||
PasswordManager.
|
||||
Aussage: Das System soll den Zugriff auf Daten und Funktionen ausschließlich berechtigten,
|
||||
authentifizierten Benutzern gewähren und dabei optional einen zweiten Faktor verlangen.
|
||||
Ergebnis: Unautorisierte Benutzer erhalten keinen Zugriff auf geschützte Daten/Funktionen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Security/*, Centron.BL/TwoFactorAuthenticator/* - Begründung:
|
||||
eigene, sicherheitsspezifische BL-Domänen belegen eine durchgesetzte Berechtigungs- und
|
||||
Authentifizierungsschicht (Details siehe SyRS/SwRS-Ebene mit PRIMÄR-Belegen je Prüfung).
|
||||
Prüfidee: Ein Benutzer ohne zugewiesenes Recht erhält beim Aufruf einer geschützten Funktion eine
|
||||
Fehlermeldung/Ablehnung statt Zugriff.
|
||||
Tracelinks: SyRS-69, SyRS-70, SyRS-71
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Sicherheitsanforderung, im Zielsystem eher zu verschärfen als
|
||||
zu entfernen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-11
|
||||
Titel: Kundenanfragen über Helpdesk/Ticketsystem strukturiert bearbeiten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Helpdesk-Mitarbeiter, Kunde
|
||||
Vorbedingung: Kunde/Vertrag ist im System bekannt.
|
||||
Fakt: Neun fachliche Unterbereiche im Helpdesk-Modul (Ticketliste, Prozessvorlagen,
|
||||
Checklisten, SLA-Überwachung, Aufgaben, Dashboard, Verbindungsnummern, Selfcare,
|
||||
externe Anbindung).
|
||||
Aussage: Das System soll Kundenanfragen als Tickets erfassen, nach Vorlagen bearbeiten, Fristen
|
||||
(SLA) überwachen und Kunden ein Selfcare-Portal anbieten.
|
||||
Ergebnis: Jede Kundenanfrage ist als Ticket mit Status, Bearbeiter und Frist nachvollziehbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Helpdesk/* (neun Unterordner) - Begründung: breite
|
||||
fachliche Aufgliederung belegt einen vollständigen Ticket-Lebenszyklus.
|
||||
Prüfidee: Ein Ticket, dessen erwartetes Ereignis (SLA-Frist) überschritten wird, erscheint in der
|
||||
Ereignis-/SLA-Überwachung.
|
||||
Tracelinks: SyRS-72 bis SyRS-80
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kernprozess für IT-Dienstleister/MSP-Mandanten.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-12
|
||||
Titel: Interne und externe Kommunikation kanalübergreifend unterstützen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: alle Benutzer, Kunde
|
||||
Vorbedingung: Kommunikationskanäle (Mail, Telefonanlage) sind konfiguriert.
|
||||
Fakt: Eigene Module/BL-Domänen für E-Mail-Verarbeitung, Chat, Telefonie (TAPI), Kalender und
|
||||
persönliche Tagesplanung.
|
||||
Aussage: Das System soll E-Mail-, Chat-, Telefonie- und Kalenderfunktionen in die Arbeitsabläufe
|
||||
integrieren, statt separate Fremdwerkzeuge zu erfordern.
|
||||
Ergebnis: Kommunikationsvorgänge sind im Kontext des jeweiligen Geschäftsvorfalls dokumentiert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Mail/*, Chats/*, Tapi/*, Calendar/* - Begründung: getrennte,
|
||||
kanalspezifische BL-Domänen belegen die jeweilige Integration.
|
||||
Prüfidee: Ein eingehender Anruf (TAPI-Event) kann einem bestehenden Kundendatensatz zugeordnet
|
||||
werden.
|
||||
Tracelinks: SyRS-81 bis SyRS-85
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - reduziert Medienbrüche im Tagesgeschäft.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-13
|
||||
Titel: Mit externen Systemen (Finanzamt/DATEV, Banken, Großhändlern, Versanddienstleistern) integrieren
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Finanzbuchhaltung, Einkäufer, Systemadministrator
|
||||
Vorbedingung: Externe Zugangsdaten/API-Keys sind hinterlegt.
|
||||
Fakt: 13 eigenständige Datenaustausch- und API-Module (BookKeeping/DATEV, Zahlungsverkehr,
|
||||
docuFORM, FinAPI, Versanddienstleister, Großhändleranbindungen, Produktdatenquellen u. a.).
|
||||
Aussage: Das System soll Buchhaltungsdaten, Zahlungsverkehr, Produktdaten und Versandaufträge
|
||||
über standardisierte oder proprietäre Schnittstellen mit externen Systemen austauschen.
|
||||
Ergebnis: Daten müssen nicht manuell zwischen c-entron und externen Systemen übertragen werden.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/*, src/centron/Centron.WPF.UI/Modules/DataExchange/* - Begründung: eigenständige
|
||||
Projekte/Module je externem System belegen aktive Integrationen.
|
||||
Prüfidee: Ein Buchhaltungsexport erzeugt eine für DATEV importierbare Datei mit den erwarteten
|
||||
Buchungssätzen.
|
||||
Tracelinks: SyRS-86 bis SyRS-98
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Integrationsbedarf bleibt in einer Neuimplementierung bestehen,
|
||||
technische Umsetzung (Formate/Protokolle) ist zu prüfen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-14
|
||||
Titel: Mobilen und webbasierten Zugriff auf Kernfunktionen bereitstellen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Außendienstmitarbeiter, Kunde (Webportal)
|
||||
Vorbedingung: Mobilgerät/Browser hat Netzwerkzugriff auf die Webservice-Schicht.
|
||||
Fakt: Eigenständige Projekte CentronNexus (mobile Ticketapp), CentronNexus.OutlookAddIn und
|
||||
eine Webservice-Hostinfrastruktur mit API-Gateway.
|
||||
Aussage: Das System soll Ticket-/Außendienstprozesse mobil sowie ausgewählte Funktionen über
|
||||
Outlook und eine Web-API bereitstellen.
|
||||
Ergebnis: Mitarbeiter im Außendienst können ohne Desktop-Client auf relevante Daten zugreifen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/nexus/CentronNexus, src/nexus/CentronNexus.OutlookAddIn,
|
||||
src/webservice/Centron.Controllers - Begründung: eigenständige Projekte belegen
|
||||
separate mobile/web Zugriffswege neben dem WPF-Desktop-Client.
|
||||
Prüfidee: Ein in CentronNexus erfasstes Ticket ist im WPF-Desktop-Client mit identischem Status
|
||||
sichtbar.
|
||||
Tracelinks: SyRS-99, SyRS-100, SyRS-101, SyRS-102, SyRS-103
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Ausgangspunkt für die geplante Web-/SaaS-Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-15
|
||||
Titel: Geschäftskennzahlen auswerten und Datenänderungen nachvollziehbar protokollieren
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Management, Vertriebsleitung, Revision
|
||||
Vorbedingung: Fachdaten aus den operativen Modulen liegen vor.
|
||||
Fakt: Module Reports/ReportEngine, Statistics, Dashboard, IndexSearch, ChangeTracking,
|
||||
Telemetry.
|
||||
Aussage: Das System soll operative Daten zu Kennzahlen/Reports verdichten, per Volltextsuche
|
||||
auffindbar machen und Datenänderungen für die Revision nachvollziehbar protokollieren.
|
||||
Ergebnis: Management-Entscheidungen stützen sich auf aktuelle, aus dem System erzeugte Kennzahlen;
|
||||
Datenänderungen sind im Nachhinein nachvollziehbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/ChangeTracking/*, Centron.DAO/ChangeTracking/* - Begründung:
|
||||
eigenständige Protokollierungsschicht für Datenänderungen.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Statistics/*, Reports/* - Begründung: eigenständige
|
||||
Auswertungsmodule.
|
||||
Prüfidee: Eine Änderung an einem geschäftskritischen Datensatz erzeugt einen Eintrag im
|
||||
Change-Tracking mit Alt-/Neuwert.
|
||||
Tracelinks: SyRS-104 bis SyRS-109
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Auswertbarkeit und Revisionssicherheit bleiben Kernanforderungen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-16
|
||||
Titel: Zusatzfunktionen (KI, Online-Banking, Umfragen, externe Tools) bedarfsgerecht anbieten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsmitarbeiter, Finanzbuchhaltung, Kunde
|
||||
Vorbedingung: Jeweilige externe Dienste (KI-API, Bankzugang) sind konfiguriert.
|
||||
Fakt: Module ArtificialIntelligence, OnlineBanking, Survey, ExternalTool als eigenständige,
|
||||
optionale Erweiterungen.
|
||||
Aussage: Das System soll KI-gestützte Texterstellung, direkten Online-Banking-Zugriff, Umfragen
|
||||
und die Einbindung externer Tools als optionale Zusatzfunktionen anbieten.
|
||||
Ergebnis: Anwender können diese Zusatzfunktionen nutzen, ohne dass sie für den Kernbetrieb
|
||||
zwingend erforderlich sind.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ArtificialIntelligence/*, OnlineBanking/*, Survey/*,
|
||||
ExternalTool/* - Begründung: eigenständige, klar abgegrenzte optionale Module.
|
||||
Prüfidee: Das System ist auch ohne konfigurierten KI-API-Schlüssel für die Kernprozesse nutzbar.
|
||||
Tracelinks: SyRS-110, SyRS-111, SyRS-112, SyRS-113
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Sonderfall - Online-Banking-Direktanbindung ist im Zielsystem ggf. durch
|
||||
Drittanbieter-Dienste (z. B. FinAPI) zu ersetzen statt eigenständig nachzubauen; die
|
||||
übrigen Funktionen sind grundsätzlich übernehmenswert.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-17
|
||||
Titel: Hardware-Assets einheitlich verwalten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Techniker, Administrator
|
||||
Vorbedingung: Hardware ist beim Kunden/im Unternehmen im Einsatz.
|
||||
Fakt: Zentrale Asset-Verwaltung unter Centron.BL/DocuBoard (`AssetManagement*`-Klassen), die
|
||||
historisch von der Druckerverwaltung als „Stammblätter" getrennt implementiert wurde
|
||||
(siehe Konsolidierungshinweis in SwRS/Analysebericht).
|
||||
Aussage: Das System soll sämtliche Hardware-Assets (nicht nur Drucker) einheitlich mit Zuordnung
|
||||
zu Kunde/Mitarbeiter und Historie verwalten.
|
||||
Ergebnis: Jedes Hardware-Asset ist eindeutig identifizierbar und einem Verantwortlichen zugeordnet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/DocuBoard/AssetManagementArticleAssignmentBL.cs,
|
||||
AssetManagementPartnerBL.cs - Begründung: eigene Klassen für Asset-Zuordnung zu Artikel
|
||||
und Partner belegen ein bestehendes, aber laut Aufgabenstellung uneinheitliches
|
||||
Asset-Konzept.
|
||||
Prüfidee: Für ein beliebiges Hardware-Asset (nicht nur Drucker) lässt sich Zuordnung und
|
||||
Zustandshistorie abrufen.
|
||||
Tracelinks: SyRS-114
|
||||
Konsolidierung: Kandidat: Konsolidierung mit der separat geführten Drucker-„Stammblatt"-Verwaltung
|
||||
(siehe SwRS-114, Hypothesen.md) zu einem einheitlichen Asset-Konzept im Zielsystem.
|
||||
Übernahmewürdigkeit: übernehmen - Konzept ist richtig, Implementierung ist zu konsolidieren.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-18
|
||||
Titel: Wissen und Zusammenarbeit über Notizen, Tags und Dokumentation unterstützen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: alle Benutzer
|
||||
Vorbedingung: Geschäftsobjekte (Tickets, Aufträge etc.) existieren.
|
||||
Fakt: Module/BL-Domänen Tags, ObjectExternalReferences, DocumentationArea, Notifications,
|
||||
SocialMedia, VideoPortal.
|
||||
Aussage: Das System soll Geschäftsobjekte verschlagworten, mit externen Referenzen verknüpfen,
|
||||
Benutzer über relevante Ereignisse benachrichtigen und Wissen (Dokumentation, Videos)
|
||||
bereitstellen.
|
||||
Ergebnis: Informationen zu einem Geschäftsvorfall sind über Tags/Referenzen schnell auffindbar,
|
||||
relevante Ereignisse werden aktiv mitgeteilt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Tags/*, Centron.BL/Notifications/* - Begründung: eigenständige
|
||||
BL-Domänen für Verschlagwortung und Benachrichtigung.
|
||||
Prüfidee: Ein mit einem Tag versehenes Objekt lässt sich über eine Tag-Suche auffinden.
|
||||
Tracelinks: SyRS-115, SyRS-116, SyRS-117
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - unterstützt Auffindbarkeit in großen Datenbeständen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-19
|
||||
Titel: System betreib- und installierbar bereitstellen
|
||||
Ebene: StRS
|
||||
Typ: nicht-funktional
|
||||
Qualitätsmerkmal: Übertragbarkeit
|
||||
Akteur: Systemadministrator, IT-Betrieb
|
||||
Vorbedingung: Zielinfrastruktur (Server/Container-Host) ist vorbereitet.
|
||||
Fakt: Eigenständige Verzeichnisse deployment/ (u. a. WixSharpInstaller) und docker/ mit
|
||||
mehreren Compose-/Dockerfile-Definitionen für API, Webservice, Demo-Umgebung.
|
||||
Aussage: Das System soll sowohl als klassisches Windows-Installationspaket als auch containerisiert
|
||||
(Docker) bereitgestellt werden können.
|
||||
Ergebnis: Der Betrieb kann zwischen On-Premises-Installation und Container-Deployment wählen.
|
||||
Belege:
|
||||
- [PRIMÄR] deployment/WixSharpInstaller/* - Begründung: WiX-basiertes Installationsprojekt belegt
|
||||
klassische Windows-Installation.
|
||||
- [PRIMÄR] docker/c-entron-api, docker/c-entron-webservice, docker/compose - Begründung:
|
||||
eigenständige Dockerfiles/Compose-Definitionen belegen Containerisierung.
|
||||
Prüfidee: Aus dem Installationsprojekt lässt sich ein lauffähiges Setup-Paket erzeugen; aus den
|
||||
Docker-Definitionen lässt sich ein Container-Image bauen.
|
||||
Tracelinks: SyRS-119
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - für die geplante SaaS-Neuimplementierung ist insbesondere der
|
||||
Container-Pfad relevant, der Windows-Installer eher veraltet.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-20
|
||||
Titel: Technische Basis (gemeinsame UI-Bausteine, Lizenzprüfung, Systemstart) bereitstellen
|
||||
Ebene: StRS
|
||||
Typ: nicht-funktional
|
||||
Qualitätsmerkmal: Wartbarkeit
|
||||
Akteur: Systemadministrator, Entwicklungsteam
|
||||
Vorbedingung: keine
|
||||
Fakt: Gemeinsame Projekte Centron.Controls, Centron.Core sowie BL/Start, BL/GUI, BL/CentronIcons.
|
||||
Aussage: Das System soll eine gemeinsame, wiederverwendbare technische Basis (UI-Controls,
|
||||
Kernbibliotheken, Startsteuerung) bereitstellen, auf der alle Fachmodule aufsetzen.
|
||||
Ergebnis: Fachmodule verwenden konsistente UI-Bausteine und eine einheitliche Startsequenz.
|
||||
Belege:
|
||||
- [PRIMÄR] src/shared/Centron.Controls/*, src/shared/Centron.Core/* - Begründung: eigenständige,
|
||||
von allen anderen Projekten referenzierte Basisbibliotheken.
|
||||
Prüfidee: Ein neues Fachmodul kann UI-Controls aus Centron.Controls ohne Duplikation wiederverwenden.
|
||||
Tracelinks: SyRS-120
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - technische Basis ist unabhängig vom Fachkonzept erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
*(Weitere StRS-Anforderungen werden bei Bedarf während der Risikovertiefung (Schritt 0c) ergänzt, sofern
|
||||
sich fachliche Ziele identifizieren lassen, die durch obige Bereiche nicht abgedeckt sind.)*
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# Software Requirements Specification (SwRS) — c-entron ERP-Suite
|
||||
|
||||
ISO/IEC/IEEE 29148:2018. Komponenten, Datenmodelle, software-interne Regeln. Diese Ebene vertieft
|
||||
gezielt die im Auftrag genannten Risikobereiche (Sicherheit, Abrechnung/Fakturierung, Berechtigungen)
|
||||
sowie weitere Stellen, an denen die Codeanalyse konkrete, software-interne Fakten (Algorithmen,
|
||||
Datenmodelle, Datenbank-Constraints) über das in SyRS bereits dokumentierte Systemverhalten hinaus
|
||||
zutage gefördert hat (Schritt 0c der Vorgehensweise). Jede SwRS-Anforderung referenziert die zugehörige
|
||||
SyRS-Anforderung.
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
ID: SwRS-1
|
||||
Titel: Datenbankschema und Feldbeschränkungen der Bankverbindungs-Entität
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: Ein Bankkonto wird gespeichert.
|
||||
Fakt: `BankAccountMaps` (FluentNHibernate) bildet `BankAccount` auf die Tabelle
|
||||
`dbo.Bankverbindungen` ab und begrenzt u. a. `IBAN` auf 50, `BIC` auf 128, `Bezeichnung`
|
||||
auf 50 Zeichen; `BankConnectionNumber` und `Comment` sind explizit `.Nullable()`
|
||||
deklariert, alle übrigen gemappten Felder (u. a. IBAN, BIC, AccountNumber) sind damit
|
||||
nach FluentNHibernate-Konvention NOT NULL.
|
||||
Aussage: Das System soll IBAN und BIC eines Bankkontos als Pflichtfelder mit fester
|
||||
Maximallänge in der Datenbank erzwingen.
|
||||
Ergebnis: Ein Bankkonto ohne IBAN kann nicht gespeichert werden; eine zu lange IBAN wird von der
|
||||
Datenbank abgewiesen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.DAO/Mappings/Accounting/BankAccountMaps.cs:9-38 - Begründung:
|
||||
durchsetzendes NHibernate-Mapping, das direkt die DB-Spaltendefinition (Länge,
|
||||
Nullability) bestimmt.
|
||||
Prüfidee: Speichern eines `BankAccount` mit `Iban = null` löst eine Persistenzausnahme aus.
|
||||
Tracelinks: SyRS-8, SyRS-22
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - grundlegende Datenintegrität für Zahlungsdaten.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-2
|
||||
Titel: Mahnstufen-Zustandsmaschine als sequenzieller Enum-Übergang
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Mahnlauf-Engine)
|
||||
Vorbedingung: Eine Rechnung mit `DunningLevel` existiert.
|
||||
Fakt: `DunningRunBL.ExecuteDunningRun` implementiert die Stufenfolge ausschließlich als
|
||||
`switch(invoice.DunningLevel)`-Anweisung mit hartkodierter Reihenfolge
|
||||
`None → Level1 → Level2 → Level3` (keine Konfigurierbarkeit zusätzlicher Stufen ohne
|
||||
Codeänderung sichtbar).
|
||||
Aussage: Die Software soll den Übergang zwischen Mahnstufen als endliche, im Code fixierte
|
||||
Zustandsmaschine mit genau vier Stufen implementieren.
|
||||
Ergebnis: Es existieren zu jedem Zeitpunkt genau vier mögliche Mahnstufen, kein Sprung über eine
|
||||
Stufe hinweg.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs:253-268 -
|
||||
Begründung: durchsetzende switch-Anweisung, die die Zustandsmaschine vollständig
|
||||
festlegt.
|
||||
Prüfidee: Aufruf von `ExecuteDunningRun` auf einer Rechnung mit `DunningLevel.Level3` führt zu
|
||||
keinem weiteren Stufenübergang (kein `Level4` im Enum vorhanden).
|
||||
Tracelinks: SyRS-12
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - feste Stufenanzahl ist eine bewusste, im Zielsystem konfigurierbar
|
||||
zu gestaltende fachliche Entscheidung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-3
|
||||
Titel: Deaktivierte DSGVO-Löschroutinen für vier zentrale Objekttypen
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (DataSecurityBL)
|
||||
Vorbedingung: Ein DSGVO-Löschantrag ruft intern `DoDeleteCustomer`, `DoDeleteSupplier`,
|
||||
`DoDeleteAccount` oder `DoDeleteContactManagementContact` auf.
|
||||
Fakt: Alle vier Methoden bestehen ausschließlich aus `throw new
|
||||
NotImplementedException("... is not ready for use!")`, gefolgt von auskommentiertem
|
||||
SQL-Code, der die ursprünglich vorgesehene Anonymisierung
|
||||
(`UPDATE h SET h.Status = 0, h.Name = '{DsgvoDeletedContactMessage}', h.Fon = default,
|
||||
...`) zeigt. Die umgebende Methode `DsgvoDeleteRightDeleteContacts` prüft Rechte korrekt
|
||||
und erzeugt ein Protokoll, ruft die eigentliche Löschung für Kontaktpersonen
|
||||
(`DoDeleteContactPerson`) aber tatsächlich auf - für Kunde/Lieferant/Konto/
|
||||
ContactManagement-Kontakt bricht der Aufruf hingegen mit Exception ab.
|
||||
Aussage: Die Software soll für alle vier Objekttypen (Kunde, Lieferant, Konto,
|
||||
ContactManagement-Kontakt) eine tatsächlich lauffähige Lösch-/Anonymisierungsroutine
|
||||
bereitstellen, statt einer bewusst deaktivierten Exception.
|
||||
Ergebnis: Ein DSGVO-Löschantrag für einen dieser vier Objekttypen wird vollständig ausgeführt statt
|
||||
abzubrechen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs:856-940,996-999,1077-1080 -
|
||||
Begründung: durchsetzender (Nicht-)Code, der die Löschung für vier von mehreren
|
||||
Objekttypen aktiv verhindert; die auskommentierte SQL-Logik belegt, dass die Funktion
|
||||
ursprünglich vorgesehen, aber inzwischen deaktiviert wurde.
|
||||
Prüfidee: End-to-End-Test eines DSGVO-Löschantrags für einen Kontakt vom Typ „Kunde" schlägt aktuell
|
||||
mit `NotImplementedException` fehl - dies ist im Rahmen der Neuimplementierung
|
||||
nachzustellen und zu beheben.
|
||||
Tracelinks: SyRS-66
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen, aber zwingend fertigzustellen - höchste Priorität, da
|
||||
unmittelbar rechtlich (DSGVO Art. 17) relevant. Siehe Analysebericht.md (Risikoliste)
|
||||
und Hypothesen.md.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-4
|
||||
Titel: Opos-Zugriff über wiederverwendete Dunning-Rechtekonstante
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Rechteprüfung)
|
||||
Vorbedingung: Ein Benutzer ruft eine Opos-Funktion auf.
|
||||
Fakt: `OposBL.ThrowIfUserHasInsufficentRights` prüft gegen
|
||||
`UserRightsConst.Controlling.Finances.Dunning` - dieselbe Rechtekonstante, die
|
||||
namentlich für das Mahnwesen (Dunning) vorgesehen ist, nicht gegen eine eigene
|
||||
„Opos"-Konstante.
|
||||
Aussage: Die Software verwendet für den Zugriffsschutz auf offene Posten (Opos) dasselbe Recht wie
|
||||
für das Mahnwesen, statt ein eigenständiges Opos-Recht zu führen.
|
||||
Ergebnis: Ein Benutzer mit Mahnwesen-Recht hat automatisch auch Zugriff auf Opos-Funktionen, auch
|
||||
wenn ihm kein separates Opos-Recht zugewiesen wurde.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/Invoices/Opos/OposBL.cs:28-36 - Begründung:
|
||||
durchsetzende Prüfung mit sichtbar falsch benannter/wiederverwendeter Rechtekonstante.
|
||||
Prüfidee: Ein Benutzer, dem ausschließlich das Recht „Dunning" zugewiesen ist, kann Opos-Funktionen
|
||||
nutzen, obwohl fachlich ggf. eine getrennte Vergabe gewünscht wäre.
|
||||
Tracelinks: SyRS-13
|
||||
Konsolidierung: Kandidat: Opos und Dunning teilen sich ein Berechtigungskonzept, obwohl es zwei
|
||||
fachlich unterscheidbare Funktionen sind - im Zielsystem ist zu entscheiden, ob dies
|
||||
eine bewusste Zusammenlegung oder eine zu behebende Ungenauigkeit ist.
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen (vorläufig) - zu klären, ob die gemeinsame Rechtevergabe
|
||||
fachlich gewollt ist.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-5
|
||||
Titel: Zählerstand-Monotonieprüfung als Vorbedingung der Preisberechnung
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (DeviceClickCounterBL)
|
||||
Vorbedingung: Ein neuer Zählerstand wird verarbeitet.
|
||||
Fakt: `GetAndUpdateDeviceClickCounter` führt die Prüfung `clickCounter.CurrentCounter >
|
||||
unassignedClicks.CounterValue` **vor** jeder Preisberechnung/Zuordnung durch (Zeilen
|
||||
250-256), sodass ein invalider Zählerstand den gesamten nachgelagerten
|
||||
Verarbeitungspfad (inkl. `AutomaticFacturaBL`-Staffelpreisberechnung, SyRS-10) gar nicht
|
||||
erst erreicht.
|
||||
Aussage: Die Software soll die Monotonieprüfung von Zählerständen als frühe Vorbedingung
|
||||
implementieren, die eine fehlerhafte Preisberechnung strukturell verhindert, statt sie
|
||||
nachgelagert zu korrigieren.
|
||||
Ergebnis: Eine fehlerhafte Preisberechnung aufgrund eines ungültigen Zählerstands ist strukturell
|
||||
ausgeschlossen, nicht nur durch nachträgliche Prüfung abgefangen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ClickContracts/DeviceClickCounterBL.cs:234-260 -
|
||||
Begründung: durchsetzende Prüfung als struktureller Vorbedingungscheck vor
|
||||
nachgelagerter Verarbeitung.
|
||||
Prüfidee: Ein invalider Zählerstand erreicht nachweislich keine der nachgelagerten
|
||||
Preisberechnungsmethoden (weder Log noch Rechnungsposition).
|
||||
Tracelinks: SyRS-17
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Muster „Validierung vor Wirkung" ist als Architekturprinzip zu
|
||||
übernehmen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-6
|
||||
Titel: Kopplung der Rechnungsspeicherung an vollständige Seriennummernerfassung
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (InvoiceBL)
|
||||
Vorbedingung: Eine Rechnung mit seriennummernpflichtigen Artikeln wird gespeichert.
|
||||
Fakt: `InvoiceBL.CanStoreInvoiceWithoutAllSerialNumbers(Invoice asset)` ist eine separate,
|
||||
abfragbare Methode (kein impliziter Seiteneffekt), die vom aufrufenden Code vor dem
|
||||
eigentlichen Speichern ausgewertet werden muss.
|
||||
Aussage: Die Software soll die Entscheidung, ob eine Rechnung ohne vollständige Seriennummern
|
||||
gespeichert werden darf, als eigenständige, explizit abfragbare Regel kapseln.
|
||||
Ergebnis: Aufrufender Code kann die Regel gezielt prüfen, bevor ein Speichervorgang angestoßen
|
||||
wird, statt auf eine Exception reagieren zu müssen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs:369 - Begründung:
|
||||
durchsetzende, benannte Regel-Methode.
|
||||
Prüfidee: Aufruf von `CanStoreInvoiceWithoutAllSerialNumbers` für eine Rechnung mit fehlenden
|
||||
Seriennummern liefert `false`, wenn die entsprechende Einstellung dies verlangt.
|
||||
Tracelinks: SyRS-15
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - explizite Regelkapselung ist gutes Architekturmuster.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-7
|
||||
Titel: Hartkodierter Schutz der Administratorengruppe vor Löschung
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (AppRightsBL)
|
||||
Vorbedingung: Ein Löschversuch einer Rechtegruppe wird ausgeführt.
|
||||
Fakt: `DeleteRightGroup` vergleicht den Gruppennamen vermutlich gegen eine feste Referenz
|
||||
(Fehlermeldung "Die Adminstratoren Gruppe darf nicht gelöscht werden") - ein
|
||||
Namens- oder ID-Vergleich auf Code-Ebene, nicht eine generische, konfigurierbare
|
||||
Schutzregel für beliebige Gruppen.
|
||||
Aussage: Die Software soll die Administratorengruppe unabhängig von Berechtigungen des
|
||||
aufrufenden Benutzers strukturell vor Löschung schützen.
|
||||
Ergebnis: Selbst ein Benutzer mit umfassenden Rechten kann die Administratorengruppe nicht
|
||||
löschen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:348-361 - Begründung:
|
||||
durchsetzende, hartkodierte Schutzregel.
|
||||
Prüfidee: Ein Löschversuch der Administratorengruppe durch einen Benutzer mit vollem
|
||||
Administratorrecht wird dennoch abgelehnt.
|
||||
Tracelinks: SyRS-69
|
||||
Konsolidierung: [HYPOTHESE] Der Schutz wirkt vermutlich namensbasiert (String-Vergleich); eine
|
||||
Umbenennung der Gruppe könnte den Schutz umgehen - ohne Einsicht in die exakte
|
||||
Vergleichslogik nicht abschließend zu verifizieren.
|
||||
Übernahmewürdigkeit: übernehmen - mit Prüfauftrag, ob der Schutz namens- oder ID-basiert erfolgt
|
||||
(ID-basiert wäre robuster).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-8
|
||||
Titel: Authentifizierungsstrategie-Auswahl über typisierten Switch-Ausdruck
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (AuthenticatorFactory)
|
||||
Vorbedingung: Ein Login-Request mit `AuthObject`/`LoginKind` liegt vor.
|
||||
Fakt: `AuthenticatorFactory.GetAuthenticator` nutzt einen C#-`switch`-Ausdruck (kein
|
||||
dictionary-/reflection-basiertes Plugin-System) zur Zuordnung `AuthObject → IAuthenticator`;
|
||||
ein nicht abgedeckter Fall führt zum `FailingAuthenticator`, nicht zu einer
|
||||
unbehandelten Ausnahme oder stillschweigendem Fallback auf Basic-Auth.
|
||||
Aussage: Die Software soll die Zuordnung von Login-Anfragen zu Authentifizierungsverfahren
|
||||
typsicher und mit explizitem, sicherem Default (fehlschlagender statt akzeptierender
|
||||
Authenticator) implementieren.
|
||||
Ergebnis: Ein neuer, im Switch nicht berücksichtigter Login-Typ führt zu einer kontrollierten
|
||||
Ablehnung, nicht zu unautorisiertem Zugriff.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/Auth/AuthenticatorFactory.cs:62-100 -
|
||||
Begründung: durchsetzende, vollständige Switch-Logik mit sicherem Default-Pfad.
|
||||
Prüfidee: Ein synthetischer `AuthObject`-Wert außerhalb der bekannten Fälle liefert einen
|
||||
`FailingAuthenticator`, verifizierbar per Unit-Test.
|
||||
Tracelinks: SyRS-70
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - sicheres Default-Verhalten (fail-closed statt fail-open) ist
|
||||
vorbildlich und im Zielsystem beizubehalten.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-9
|
||||
Titel: PIN-Validierung mit getrennten Fehlermeldungen für „kein Schlüssel" und „falsche PIN"
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (TwoFactorAuthenticationBL)
|
||||
Vorbedingung: Ein Benutzer gibt eine PIN ein.
|
||||
Fakt: `ValidateAuthenticationPin` unterscheidet im Code explizit zwei Fehlerfälle mit
|
||||
unterschiedlichem Text ("kein Zwei-Faktor Schlüssel ... hinterlegt" vs. "eingegebene
|
||||
PIN ist ungültig"), was potenziell Rückschlüsse zulässt, ob ein Benutzer überhaupt
|
||||
2FA-konfiguriert hat.
|
||||
Aussage: Die Software soll bei fehlgeschlagener Zwei-Faktor-Prüfung zwischen den Fehlerursachen
|
||||
unterscheiden, wobei abzuwägen ist, ob die unterschiedlichen Meldungen einem Angreifer
|
||||
Informationen preisgeben (User-Enumeration-Risiko).
|
||||
Ergebnis: Ein legitimer Benutzer erhält eine klare Fehlermeldung; das Sicherheitsrisiko der
|
||||
Informationspreisgabe ist im Zielsystem zu bewerten.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:43-54 -
|
||||
Begründung: durchsetzende, zweigeteilte Fehlerbehandlung.
|
||||
Prüfidee: Ein Login-Versuch für einen Benutzer ohne 2FA-Schlüssel liefert eine andere Meldung als
|
||||
für einen Benutzer mit falscher PIN - beide Fälle sind von außen unterscheidbar.
|
||||
Tracelinks: SyRS-71
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen, aber Meldungstexte im Zielsystem vereinheitlichen -
|
||||
unterschiedliche Fehlermeldungen bei Authentifizierung gelten allgemein als
|
||||
Sicherheits-Anti-Pattern (User-Enumeration); ob dies im internen Kontext (Mitarbeiter-
|
||||
Login, kein öffentlicher Endpunkt) tatsächlich risikorelevant ist, ist mit
|
||||
Sicherheitsexperten zu klären.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-10
|
||||
Titel: Anwendungsseitige Verschlüsselung sensibler Einstellungswerte vor Persistierung
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (PdfSigningBL, MailScannerBL)
|
||||
Vorbedingung: Ein sensibler Wert (Zertifikatspasswort, Postfach-Passwort) wird gespeichert.
|
||||
Fakt: Sowohl `PdfSigningBL.SavePdfSigningSettings` als auch `MailScannerBL.SaveProfile`
|
||||
rufen vor dem Schreiben `_cryptoLogic.EncryptText(...)` auf - dasselbe
|
||||
Verschlüsselungsmuster wird unabhängig voneinander an mindestens zwei Stellen
|
||||
dupliziert, statt zentral in der Settings-/Persistenzschicht erzwungen zu werden.
|
||||
Aussage: Die Software soll sensible Konfigurationswerte konsistent verschlüsselt speichern; die
|
||||
Verschlüsselung erfolgt jedoch aktuell je aufrufender Stelle manuell, nicht zentral
|
||||
erzwungen.
|
||||
Ergebnis: Zwei identifizierte Stellen verschlüsseln korrekt; ein Risiko besteht darin, dass eine
|
||||
künftige, neue sensible Einstellung die Verschlüsselung vergisst, da sie nicht zentral
|
||||
erzwungen wird.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Security/PdfSigningBL.cs:85-92,
|
||||
src/backend/Centron.BL/MailScanner/MailScannerBL.cs:74-110 - Begründung: identisches,
|
||||
aber dupliziertes Verschlüsselungsmuster an zwei unabhängigen Stellen.
|
||||
Prüfidee: Eine dritte, neu hinzugefügte sensible Einstellung (Stichprobe im Code) verwendet
|
||||
ebenfalls `_cryptoLogic.EncryptText` - oder eben nicht, was das Risiko belegen würde.
|
||||
Tracelinks: SyRS-67, SyRS-81
|
||||
Konsolidierung: Kandidat: Verschlüsselungsaufruf ist an mehreren Stellen dupliziert statt zentral in
|
||||
der Settings-Infrastruktur (`AppSettingsBL`) erzwungen - im Zielsystem als
|
||||
Attributs-/Middleware-basierte, zentrale Verschlüsselung sensibler Felder umzusetzen.
|
||||
Übernahmewürdigkeit: übernehmen - mit Empfehlung zur Zentralisierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-11
|
||||
Titel: Chat-Mitgliedschaft als Vorbedingung für jede schreibende Operation
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (ChatBL)
|
||||
Vorbedingung: Eine Chat-Operation wird angefordert.
|
||||
Fakt: Die Mitgliedschaftsprüfung ist in `ChatBL` an drei Stellen (`AddMemberToChat`,
|
||||
`RenameChat`, `SendChatMessage`) jeweils separat implementiert (identische
|
||||
Fehlermeldung, aber dreifacher Code), nicht als gemeinsamer Vorbedingungs-Filter
|
||||
(z. B. Attribut/Interceptor).
|
||||
Aussage: Die Software soll die Chat-Mitgliedschaftsprüfung konsistent vor jeder schreibenden
|
||||
Chat-Operation durchsetzen.
|
||||
Ergebnis: Alle drei geprüften Operationen sind gegen Nicht-Mitglieder abgesichert; das Muster ist
|
||||
jedoch dreifach dupliziert statt zentral implementiert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Chats/ChatBL.cs:112-137,150-170,202-220 - Begründung:
|
||||
durchsetzende, aber duplizierte Prüflogik.
|
||||
Prüfidee: Eine vierte, künftig hinzugefügte schreibende Chat-Operation (Stichprobe im Code) enthält
|
||||
ebenfalls die Mitgliedschaftsprüfung.
|
||||
Tracelinks: SyRS-82
|
||||
Konsolidierung: Kandidat: dreifach duplizierte Prüflogik - im Zielsystem als gemeinsamer Vorbedingungs-
|
||||
Check (z. B. Middleware/Decorator) zu implementieren.
|
||||
Übernahmewürdigkeit: übernehmen - mit Empfehlung zur Zentralisierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-12
|
||||
Titel: SEPA-Mandatsverwaltung als Teilfunktion der DSGVO-Businesslogik-Klasse
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (SepaContractWebServiceBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: Alle SEPA-Mandatsoperationen (`SaveSepaContract`, `GetSepaContracts`,
|
||||
`GetSepaContractPdfFromTemplate`) delegieren an ein privates Feld `_dsgvoBL`, dessen Typ
|
||||
aus dem Namespace `Administration.Documents.Dsgvo` stammt - SEPA-Mandate sind damit
|
||||
softwareseitig eine Teilfunktion der DSGVO-Dokumentenklasse, keine eigenständige
|
||||
Klasse.
|
||||
Aussage: Die Software soll SEPA-Mandate als eigenständige, fachlich benannte Komponente führen,
|
||||
statt sie als Teilfunktion einer allgemeinen DSGVO-Dokumentenklasse zu implementieren.
|
||||
Ergebnis: Änderungen an der SEPA-Logik erfordern aktuell das Verständnis der breiteren
|
||||
DSGVO-Klasse; eine Trennung würde die Wartbarkeit erhöhen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/WebServices/Administration/Documents/SepaContracts/SepaContractWebServiceBL.cs:14-93 -
|
||||
Begründung: durchsetzende Delegation an eine fachlich andersartig benannte Klasse.
|
||||
Prüfidee: Auffinden der SEPA-Mandatslogik im Code erfordert Kenntnis der DSGVO-Klassenstruktur,
|
||||
nicht nur Suche nach „Sepa".
|
||||
Tracelinks: SyRS-23
|
||||
Konsolidierung: Kandidat: SEPA-Mandatsverwaltung ist im Zielsystem als eigenständige Komponente zu
|
||||
führen, getrennt von der DSGVO-Löschfunktion (M066).
|
||||
Übernahmewürdigkeit: übernehmen - mit struktureller Trennung im Zielsystem.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-13
|
||||
Titel: Unterstützung von fünf SEPA-PAIN.008-Schemaversionen als Enum
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (PaymentTransactionBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: `PaymentTransactionInterface` ist ein Enum mit mindestens fünf Werten
|
||||
(`Sepa0080101`, `Sepa0080302`, `Sepa0080102`, `Sepa00800102GBIC3`,
|
||||
`Sepa00800108GBIC4`), die konkrete PAIN.008-Schemaversionen samt „GBIC"-Variante
|
||||
(deutsche Sonderregelung für Gläubiger-Identifikationsnummer) referenzieren.
|
||||
Aussage: Die Software soll die Auswahl der SEPA-Exportschemaversion als geschlossene, im Code
|
||||
gepflegte Aufzählung verwalten.
|
||||
Ergebnis: Eine neue SEPA-Schemaversion erfordert eine Codeänderung (neuer Enum-Wert), keine reine
|
||||
Konfiguration.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs:56-65 -
|
||||
Begründung: durchsetzende, geschlossene Aufzählung der unterstützten Formate.
|
||||
Prüfidee: Eine im XML-Standard neu veröffentlichte PAIN.008-Version ist ohne Codeänderung nicht
|
||||
wählbar - dies ist eine bewusste Design-Entscheidung, die im Zielsystem ggf.
|
||||
konfigurierbarer zu gestalten ist.
|
||||
Tracelinks: SyRS-87
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Formatvielfalt ist fachlich notwendig; Erweiterbarkeit ohne
|
||||
Codeänderung wäre eine sinnvolle Verbesserung im Zielsystem.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-14
|
||||
Titel: Vorab-Validierung der Belegdaten vor eBInterface-XML-Erzeugung
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (EbInterfaceLogic)
|
||||
Vorbedingung: Eine Rechnung soll als eBInterface-Datei exportiert werden.
|
||||
Fakt: `GenerateFile` prüft `validationResult.Status == ResultStatus.Error` **vor** dem
|
||||
eigentlichen XML-Aufbau (Zeile 25), sodass eine unvollständige Rechnung strukturell nie
|
||||
zu einer XML-Ausgabedatei führt (kein Erzeugen-dann-Validieren).
|
||||
Aussage: Die Software soll Belegdaten vor, nicht nach der Dateierzeugung validieren.
|
||||
Ergebnis: Es existiert keine unvollständige, aber bereits erzeugte eBInterface-Datei.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:22-25 - Begründung: durchsetzende
|
||||
Validierung als erster Schritt der Methode.
|
||||
Prüfidee: Ein Codereview/Test bestätigt, dass bei Validierungsfehler kein XML-Byte-Array
|
||||
zurückgegeben wird.
|
||||
Tracelinks: SyRS-97
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - „validate before generate" ist ein zu erhaltendes Architekturmuster.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-15
|
||||
Titel: ORM-Interceptor als generischer Mechanismus der Änderungsprotokollierung
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (NHibernate-Infrastruktur)
|
||||
Vorbedingung: keine
|
||||
Fakt: `ChangeTrackingEventListener` implementiert ein NHibernate-Event-Listener-Interface
|
||||
(technischer ORM-Interceptor-Mechanismus) statt manuell in jeder BL-Klasse
|
||||
Protokollierungscode aufzurufen; `LogHourlySurchargeRateChangesListener` existiert als
|
||||
zusätzlicher, spezialisierter Listener parallel dazu.
|
||||
Aussage: Die Software soll Änderungsprotokollierung als generischen, ORM-Ebenen-Mechanismus
|
||||
implementieren, der automatisch für alle gemappten Entitäten greift, mit der Option
|
||||
entitätsspezifischer Zusatzlistener für besonders sensible Daten.
|
||||
Ergebnis: Neue Entitäten werden ohne Zusatzaufwand protokolliert; besonders sensible Entitäten
|
||||
(z. B. Stundenzuschlagssätze) erhalten zusätzlich eine spezialisierte Behandlung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.DAO/ChangeTracking/ChangeTrackingEventListener.cs,
|
||||
LogHourlySurchargeRateChangesListener.cs - Begründung: durchsetzende
|
||||
ORM-Interceptor-Registrierung.
|
||||
Prüfidee: Eine Codeänderung an einer beliebigen NHibernate-gemappten Entität erscheint im
|
||||
Change-Tracking, ohne dass der Entwickler Protokollierungscode ergänzt hat.
|
||||
Tracelinks: SyRS-108
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - generischer ORM-Interceptor ist ein gutes, direkt übertragbares
|
||||
Architekturmuster (z. B. via EF-Core-Interceptors oder Event-Sourcing im Zielsystem).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-16
|
||||
Titel: Sprachspezifischer Analyzer als Baustein der Indexierungspipeline
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (IndexSearchBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: `GermanAnalyzer` wird explizit in der Indexierungspipeline verwendet (Lucene-artiges
|
||||
Analyzer-Konzept); `IObjectFulltextIndex` als gemeinsame Schnittstelle erlaubt
|
||||
objektartspezifische Indexklassen (`AccountFulltextIndex`, `TicketFulltextIndex`), die
|
||||
vermutlich unterschiedliche indizierte Felder je Objektart definieren.
|
||||
Aussage: Die Software soll die Volltextindizierung über eine austauschbare, sprachspezifische
|
||||
Analyzer-Komponente und objektartspezifische Indexdefinitionen realisieren.
|
||||
Ergebnis: Deutsche Sprachbesonderheiten (Umlaute, Komposita) werden bei der Suche korrekt
|
||||
berücksichtigt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/IndexSearch/GermanAnalyzer.cs,
|
||||
Indexes/IObjectFulltextIndex.cs - Begründung: durchsetzende Analyzer- und
|
||||
Indexarchitektur.
|
||||
Prüfidee: Eine Suche nach „Straße" findet auch Datensätze mit „Strasse" (bzw. umgekehrt), sofern
|
||||
der GermanAnalyzer eine entsprechende Normalisierung vornimmt.
|
||||
Tracelinks: SyRS-107
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - austauschbare Analyzer-Architektur ist direkt übertragbar,
|
||||
ermöglicht im Zielsystem ggf. Mehrsprachigkeit.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-17
|
||||
Titel: SQL-basierte Mindestbestandsermittlung mit Nebenlager-Sonderfall
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (OrderSuggestionListBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: Die Mindestbestandsprüfung ist direkt als eingebettetes SQL implementiert (nicht als
|
||||
LINQ/ORM-Ausdruck), mit getrennten Teilabfragen für Hauptlager (`a.Mindestbestand`) und
|
||||
Nebenlager (`nla.Mindestbestand` aus einer separaten Tabelle `NLA`), was auf ein
|
||||
eigenes Nebenlager-Datenmodell mit eigenem Mindestbestand je Lagerort hindeutet.
|
||||
Aussage: Die Software soll den Mindestbestand je Lagerort (Haupt- und Nebenlager) getrennt
|
||||
konfigurierbar und in der Bestellvorschlagsermittlung berücksichtigen.
|
||||
Ergebnis: Ein Artikel kann im Hauptlager ausreichend, im Nebenlager aber unter Mindestbestand sein
|
||||
und erscheint dann trotzdem auf der Vorschlagsliste für das betroffene Nebenlager.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Purchasing/OrderSuggestionList/OrderSuggestionListBL.cs:139-158 -
|
||||
Begründung: durchsetzendes SQL mit getrennter Haupt-/Nebenlager-Logik.
|
||||
Prüfidee: Ein Artikel mit ausreichendem Hauptlagerbestand, aber leerem Nebenlager erscheint auf
|
||||
der Bestellvorschlagsliste für das Nebenlager.
|
||||
Tracelinks: SyRS-27
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - lagerortgenaue Mindestbestandsführung ist fachlich wertvoll; direkt
|
||||
eingebettetes SQL (statt ORM) ist im Zielsystem hinsichtlich Wartbarkeit zu bewerten.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-18
|
||||
Titel: Methodenweite Lizenzprüfung ohne zentrale Aspektschicht
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (ProductionOrderBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: Die Lizenzprüfung ist in `ProductionOrderBL` in *jeder* der mindestens sieben
|
||||
öffentlichen Methoden einzeln als erste Anweisung dupliziert, statt über einen
|
||||
zentralen Aspekt (Decorator/Attribut/Interceptor) einmalig für die gesamte Klasse
|
||||
durchgesetzt zu werden.
|
||||
Aussage: Die Software soll Lizenzprüfungen zentral (z. B. klassenweit oder via Aspekt) statt
|
||||
methodenweise dupliziert durchsetzen, um das Risiko einer vergessenen Prüfung bei neuen
|
||||
Methoden zu vermeiden.
|
||||
Ergebnis: Eine künftig hinzugefügte Methode ohne die duplizierte Prüfzeile wäre lizenzlos nutzbar
|
||||
- ein struktureller Risikofaktor.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Production/ProductionOrderBL.cs:25-211 (sieben Fundstellen) -
|
||||
Begründung: durchsetzende, aber vollständig duplizierte Prüflogik.
|
||||
Prüfidee: Codereview einer neu hinzugefügten Methode in `ProductionOrderBL` (Stichprobe) zeigt, ob
|
||||
die Lizenzprüfzeile vergessen wurde.
|
||||
Tracelinks: SyRS-41
|
||||
Konsolidierung: Kandidat: Lizenzprüfung ist ein klassenübergreifend wiederkehrendes, aber jeweils
|
||||
dupliziertes Muster (siehe auch SwRS-10) - im Zielsystem als zentraler Aspekt/Middleware
|
||||
umzusetzen.
|
||||
Übernahmewürdigkeit: übernehmen - mit struktureller Verbesserung (Zentralisierung) im Zielsystem.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-19
|
||||
Titel: Fehlende sichtbare Rechteprüfung in den SQL-Diagnosefunktionen
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (SQLManagementBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: In den untersuchten Ausschnitten von `ShowLastSqlQueries`, `ShowBackupInformations` und
|
||||
`ShowBlockedSqlProcess` ist - anders als z. B. in `OposBL` (SwRS-4) oder `PdfSigningBL`
|
||||
(SwRS-10) - **keine** Rechteprüfung (`CheckRightsFromUser`/`HasUserRight`) im
|
||||
unmittelbaren Methodenkörper sichtbar; die Absicherung könnte auf einer höheren Ebene
|
||||
(z. B. Menüsichtbarkeit im UI, WebService-Autorisierungsfilter) erfolgen, die in dieser
|
||||
Iteration nicht mitanalysiert wurde.
|
||||
Aussage: Die Software muss den Zugriff auf SQL-Diagnosefunktionen (Ausführungshistorie,
|
||||
Backup-Status, blockierende Prozesse) zuverlässig auf Administratoren beschränken,
|
||||
unabhängig davon, über welchen Kanal (Desktop, Web-API) der Aufruf erfolgt.
|
||||
Ergebnis: Kein Benutzer ohne Administratorrecht kann SQL-Ausführungshistorie oder Serverinterna
|
||||
einsehen, auch nicht über einen alternativen Aufrufweg (z. B. direkten
|
||||
WebService-Aufruf).
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/SQLManagement/SQLManagementBL.cs:17-90 -
|
||||
Begründung: Abwesenheit einer Rechteprüfung im BL-Methodenkörper ist selbst der
|
||||
dokumentierte Befund; ob eine Absicherung auf UI- oder WebService-Ebene erfolgt, wurde
|
||||
nicht verifiziert.
|
||||
Prüfidee: Ein direkter, authentifizierter aber nicht-administrativer WebService-Aufruf von
|
||||
`ShowLastSqlQueries` (falls über die Webservice-Schicht erreichbar) ist gezielt zu
|
||||
testen, ob er abgelehnt wird.
|
||||
Tracelinks: SyRS-65
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen, aber mit Sicherheitsprüfung - ohne Nachweis einer
|
||||
Absicherung auf höherer Ebene ist dies ein potenzielles Sicherheitsrisiko und im
|
||||
Zielsystem explizit mit einer expliziten Rechteprüfung zu versehen (siehe Hypothesen.md).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-20
|
||||
Titel: PSD2-konformes Consent-Datenmodell in der FinAPI-Anbindung
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (FinAPI-Client)
|
||||
Vorbedingung: keine
|
||||
Fakt: `BankConnectionInterfaceAisConsent` bildet eine eigenständige Entität für die
|
||||
PSD2-Einwilligung (Account Information Service, AIS) ab, getrennt von
|
||||
`AccessToken` (technischer Zugriffstoken) und `BankConnectionInterface`
|
||||
(Schnittstellendefinition je Bank) - ein dreistufiges Datenmodell
|
||||
Verbindung/Schnittstelle/Einwilligung.
|
||||
Aussage: Die Software soll Bankverbindung, technische Schnittstelle und rechtliche Einwilligung
|
||||
(Consent) als getrennte, aber verknüpfte Datenmodelle führen.
|
||||
Ergebnis: Der Widerruf einer Einwilligung kann isoliert erfolgen, ohne die technische
|
||||
Verbindungsdefinition zu verändern.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/Centron.APIs.FinAPI/Data/BankConnectionInterfaceAisConsent.cs,
|
||||
AccessToken.cs, BankConnectionInterface.cs - Begründung: durchsetzende, getrennte
|
||||
Datenmodelle.
|
||||
Prüfidee: Ein Widerruf des Consent-Datensatzes verhindert weitere Kontoabfragen, ohne die
|
||||
`BankConnection`-Stammdaten zu löschen.
|
||||
Tracelinks: SyRS-94
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - PSD2-konformes Consent-Modell ist regulatorisch notwendig und direkt
|
||||
übertragbar.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-21
|
||||
Titel: Strukturell getrennte Datenmodelle für Drucker- und Asset-Verwaltung
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: keine
|
||||
Fakt: `NetworkComponentDataPrinter` erbt von `NetworkComponentData` (Namespace
|
||||
`Sales.DocumentationWizardArea.Data`) mit den Feldern `Share`, `Subnet`, `Name` -
|
||||
einem netzwerktechnischen Datenmodell ohne Felder für Vertragszuordnung, Lebenszyklus
|
||||
oder Standort, wie sie `AssetManagementArticleAssignment` (Namespace `DocuBoard`)
|
||||
besitzt. Beide Modelle referenzieren keine gemeinsame Basisklasse oder Schnittstelle.
|
||||
Aussage: Die Software führt Drucker technisch als Netzwerkkomponenten-Dokumentation, nicht als
|
||||
Asset - beide Datenmodelle sind auf Code-Ebene vollständig unabhängig voneinander und
|
||||
nicht über eine gemeinsame Abstraktion verbunden.
|
||||
Ergebnis: Eine Änderung an einem Drucker-Datensatz (z. B. Standortwechsel) wirkt sich nicht auf
|
||||
eine etwaige Asset-Historie desselben physischen Geräts aus, da keine Verknüpfung
|
||||
besteht.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.Entities/Entities/Sales/DocumentationWizardArea/Data/NetworkComponentDataPrinter.cs,
|
||||
src/backend/Centron.BL/DocuBoard/AssetManagementArticleAssignmentBL.cs - Begründung:
|
||||
durchsetzende, strukturell unabhängige Datenmodelle ohne gemeinsame Basis.
|
||||
Prüfidee: Codesuche nach einer gemeinsamen Schnittstelle/Basisklasse zwischen beiden Modellen
|
||||
liefert kein Ergebnis (bestätigt in dieser Iteration).
|
||||
Tracelinks: SyRS-114
|
||||
Konsolidierung: Kandidat: **Kern des im Auftrag genannten Konsolidierungsbeispiels** - im Zielsystem
|
||||
ist ein gemeinsames Asset-Basismodell zu schaffen, das sowohl Netzwerk-/
|
||||
Dokumentationsfelder als auch Vertrags-/Lebenszyklusfelder abdeckt.
|
||||
Übernahmewürdigkeit: Workaround - siehe SyRS-114.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-22
|
||||
Titel: Getrennte Rechtebäume für Desktop- und Web-/Mobile-Zugriff ohne erkennbare Synchronisation
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Rechteprüfung Desktop vs. Mobile)
|
||||
Vorbedingung: keine
|
||||
Fakt: `AppRightsBL` (Desktop, Rechte-IDs als `int`) und `WebRightNode` (CentronNexus, eine
|
||||
Baumstruktur) sind vollständig getrennte Typen ohne im Rahmen dieser Iteration
|
||||
identifizierte gemeinsame Quelle oder Synchronisationsmechanismus.
|
||||
Aussage: Die Software soll sicherstellen, dass ein einem Mitarbeiter entzogenes Desktop-Recht
|
||||
nicht implizit im mobilen Web-Rechtebaum fortbesteht.
|
||||
Ergebnis: Eine Rechteänderung wirkt konsistent über alle Zugriffskanäle.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs,
|
||||
src/nexus/CentronNexus/Management/WebAccount/Model/WebRightNode.cs - Begründung: zwei
|
||||
strukturell unabhängige Typen ohne im untersuchten Code sichtbare Verknüpfung.
|
||||
Prüfidee: Entzug eines Desktop-Rechts für einen Mitarbeiter wird zeitnah (gleicher Vorgang oder
|
||||
dokumentierter Synchronisationslauf) im zugehörigen Web-Recht nachvollzogen - zu
|
||||
verifizieren mit Fachexperten, da die Synchronisationslogik in dieser Iteration nicht
|
||||
lokalisiert werden konnte.
|
||||
Tracelinks: SyRS-100
|
||||
Konsolidierung: [HYPOTHESE] Ohne Nachweis eines Synchronisationsmechanismus besteht das Risiko
|
||||
auseinanderlaufender Berechtigungen zwischen Desktop und Mobile - im Zielsystem ist ein
|
||||
einziges, kanalübergreifendes Rechtemodell vorzusehen.
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen, aber im Zielsystem auf ein Rechtemodell konsolidieren.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-23
|
||||
Titel: Fehlerprotokollierung je Einzeldatensatz statt Transaktionsabbruch bei Massenänderungen
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (MassUpdateBL)
|
||||
Vorbedingung: Ein Massenupdate-Lauf verarbeitet mehrere Datensätze.
|
||||
Fakt: `StartReceiptPriceUpdate`/`StartArticlePriceUpdate`/`StartAccountDataUpdate` prüfen
|
||||
`saveResult.Status is ResultStatus.Error` **innerhalb** einer Verarbeitungsschleife über
|
||||
mehrere Datensätze und fangen unerwartete Exceptions je Datensatz ab
|
||||
("Ein unerwarteter Fehler ist aufgetreten. {...}"), statt die gesamte Operation in einer
|
||||
Datenbanktransaktion mit Rollback bei erstem Fehler zu kapseln.
|
||||
Aussage: Die Software soll bei Massenänderungen bewusst auf Best-Effort-Verarbeitung mit
|
||||
Fehlerprotokoll je Datensatz setzen, statt eine All-or-Nothing-Transaktion zu verwenden.
|
||||
Ergebnis: Erfolgreiche Datensätze bleiben auch bei Fehlern in anderen Datensätzen gespeichert;
|
||||
Nachteil ist ein inkonsistenter Zwischenzustand bei Teilfehlern, der manuell nachbearbeitet
|
||||
werden muss.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/MassUpdate/MassUpdateBL.cs:238-501 - Begründung: durchsetzende
|
||||
Schleifenlogik mit Fehlerbehandlung je Iteration statt äußerer Transaktion.
|
||||
Prüfidee: Ein Massenupdate mit einem fehlerhaften Datensatz in der Mitte einer Liste von zehn
|
||||
Datensätzen speichert die neun übrigen trotzdem.
|
||||
Tracelinks: SyRS-47
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen (vorläufig) - ob Best-Effort oder All-or-Nothing fachlich
|
||||
gewünscht ist, hängt vom Anwendungsfall ab und ist mit dem Fachbereich zu klären.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-24
|
||||
Titel: Parallele Datentypen für Mitarbeiterabteilungen als Migrationsartefakt
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: keine
|
||||
Fakt: `EmployeeDepartmentBL` exponiert parallel Methoden für die Typen
|
||||
`EmployeeDepartment` und `EmployeeDepartment2`, wobei die Versionsziffer im Typnamen
|
||||
selbst (statt in einem Namespace/Ordner) geführt wird - ein typisches Merkmal einer
|
||||
unvollständig nachgezogenen Datenmodell-Migration.
|
||||
Aussage: Die Software soll langfristig nur ein Abteilungs-Datenmodell führen; die aktuelle
|
||||
Parallelführung zweier Typen ist ein zu bereinigendes Migrationsartefakt.
|
||||
Ergebnis: Entwickler müssen bei jeder Änderung entscheiden, welcher der beiden Typen zu verwenden
|
||||
ist - Fehlerquelle für Inkonsistenzen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Employees/EmployeeDepartmentBL.cs:20-45 -
|
||||
Begründung: durchsetzende, parallele API für beide Typen im selben Klassenkörper.
|
||||
Prüfidee: Codesuche nach Verwendungsstellen von `EmployeeDepartment` (v1) versus
|
||||
`EmployeeDepartment2` in den UI-Projekten zeigt, ob v1 bereits vollständig durch v2
|
||||
abgelöst ist oder beide aktiv genutzt werden.
|
||||
Tracelinks: SyRS-50
|
||||
Konsolidierung: Kandidat: siehe SyRS-50 - im Zielsystem auf ein Modell zu konsolidieren.
|
||||
Übernahmewürdigkeit: Workaround - Versionsziffer im Typnamen ist ein klares Migrationsmerkmal.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-25
|
||||
Titel: Zweideutige Feldbenennung bei artikelbezogenen Umrechnungsfaktoren
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: keine
|
||||
Fakt: Das Feld `FactorToSeconds` in `ArticleUnitBL.CreateOrUpdateArticleUnit` trägt einen
|
||||
zeitbezogenen Namen, wird aber für die generische Umrechnung von Artikel-Mengeneinheiten
|
||||
(nicht nur Zeiteinheiten) verwendet - eine Diskrepanz zwischen Feldname und
|
||||
tatsächlichem, generischerem Verwendungszweck.
|
||||
Aussage: Die Software soll Umrechnungsfaktoren mit einem ihrem tatsächlichen Verwendungszweck
|
||||
entsprechenden, eindeutigen Namen führen.
|
||||
Ergebnis: Die Feldbenennung erschwert aktuell das Verständnis für neue Entwickler; funktional ist
|
||||
keine Fehlfunktion belegt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Warehousing/ArticleUnitBL.cs:21-35 - Begründung: durchsetzendes
|
||||
Feld mit irreführendem Namen im produktiv verwendeten Code.
|
||||
Prüfidee: Codesuche zeigt, ob `FactorToSeconds` ausschließlich für Zeiteinheiten oder auch für
|
||||
andere physische Mengeneinheiten (Stück, Meter) verwendet wird.
|
||||
Tracelinks: SyRS-31
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen, mit Umbenennung im Zielsystem zur Vermeidung von
|
||||
Missverständnissen (z. B. `ConversionFactorToBaseUnit`).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-26
|
||||
Titel: Rechte- und Eindeutigkeitsprüfung als zwei getrennte Vorbedingungen der Inventuranlage
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (InventoryBL)
|
||||
Vorbedingung: Eine neue Inventur wird angelegt.
|
||||
Fakt: `AddInventory` prüft Berechtigung (`RightCheckFailed`) **und** ruft anschließend
|
||||
`IsvalidInventoryName` separat auf - zwei unabhängig auswertbare Vorbedingungen statt
|
||||
einer kombinierten Prüfung, was eine gezielte Testbarkeit jeder Regel einzeln erlaubt.
|
||||
Aussage: Die Software soll Berechtigungsprüfung und Namenseindeutigkeit als unabhängig
|
||||
testbare, getrennte Vorbedingungen der Inventuranlage implementieren.
|
||||
Ergebnis: Beide Regeln sind unabhängig voneinander verifizierbar und wartbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Warehousing/InventoryManagement/InventoryBL.cs:75-102,137-143 -
|
||||
Begründung: durchsetzende, klar getrennte Prüfmethoden.
|
||||
Prüfidee: Unit-Test von `IsvalidInventoryName` allein (ohne Rechteprüfung) bestätigt die
|
||||
Namensregel isoliert.
|
||||
Tracelinks: SyRS-34
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - klare Trennung von Vorbedingungen ist gutes Architekturmuster.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-27
|
||||
Titel: Barcode-Zuordnungsstatus als Sperre gegen doppelte Auftragszuordnung
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (BarcodeBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: `UpdateBarcodeSetInOrderState` liest vor dem Schreiben den aktuellen
|
||||
Zuordnungszustand (`barcodeInfo.OrderNumber`) und vergleicht ihn implizit gegen den
|
||||
neuen Zielauftrag, bevor eine Zuordnung geschrieben wird - ein klassisches
|
||||
Check-then-Act-Muster ohne im untersuchten Ausschnitt erkennbare Sperre gegen
|
||||
nebenläufige Zugriffe (Race Condition zwischen zwei gleichzeitigen Zuordnungsversuchen
|
||||
ist ohne Transaktionsisolation theoretisch möglich).
|
||||
Aussage: Die Software soll die Zuordnung eines Barcodes zu einem Auftrag exklusiv (gegen
|
||||
nebenläufige Zuordnungsversuche abgesichert) durchsetzen.
|
||||
Ergebnis: Zwei nahezu gleichzeitige Zuordnungsversuche für denselben Barcode zu unterschiedlichen
|
||||
Aufträgen führen nicht zu einer inkonsistenten Doppelzuordnung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Warehousing/BarcodeBL.cs:73-93 - Begründung: durchsetzende, aber
|
||||
im untersuchten Ausschnitt nicht erkennbar transaktional abgesicherte Prüf-und-Schreib-
|
||||
Logik.
|
||||
Prüfidee: Ein Lasttest mit zwei parallelen Zuordnungsversuchen desselben Barcodes zu
|
||||
unterschiedlichen Aufträgen zeigt, ob beide oder nur einer erfolgreich ist.
|
||||
Tracelinks: SyRS-29
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen (vorläufig) - Transaktionsisolation auf DB-Ebene könnte die
|
||||
Race Condition bereits verhindern; dies war ohne Einsicht in die Transaktionskonfiguration
|
||||
nicht abschließend zu verifizieren.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-28
|
||||
Titel: Getrennte Datenhaltung für Auftrags-Barcodes und Artikel-EAN-Codes
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: keine
|
||||
Fakt: `BarCode`/`BarCode2` (BarcodeBL) und `ArticleEANCode` (ArticleEANCodeBL) sind zwei
|
||||
strukturell getrennte Entitätsfamilien ohne im untersuchten Code erkennbare gemeinsame
|
||||
Basis, obwohl beide fachlich Identifikationscodes für Artikel/Auftragspositionen
|
||||
darstellen.
|
||||
Aussage: Die Software führt Auftrags-/Seriennummern-Barcodes und Artikel-EAN-Codes als
|
||||
vollständig unabhängige Datenmodelle.
|
||||
Ergebnis: Eine Suche nach einem Code muss aktuell beide Modelle getrennt abfragen, um alle
|
||||
Treffer zu finden.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Warehousing/BarcodeBL.cs,
|
||||
ArticleManagement/ArticleEANCodeBL.cs - Begründung: durchsetzende, unabhängige
|
||||
Datenmodelle.
|
||||
Prüfidee: Eine Codesuche über beide Modelle liefert aktuell zwei getrennte Ergebnismengen statt
|
||||
einer vereinheitlichten.
|
||||
Tracelinks: SyRS-32
|
||||
Konsolidierung: Kandidat: siehe SyRS-32 - im Zielsystem in einem gemeinsamen
|
||||
Identifikationscode-Konzept zu bündeln.
|
||||
Übernahmewürdigkeit: übernehmen - mit Konsolidierungshinweis.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-29
|
||||
Titel: Explizite Bereichsprüfung bei mandantenspezifischem Logo-Index
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (MandatorBL)
|
||||
Vorbedingung: keine
|
||||
Fakt: `GetMandatorLogoByIndex` prüft den übergebenen Index explizit gegen den festen Bereich
|
||||
1-8 ("index can be between 1 and 8") - eine hartkodierte Obergrenze, die auf eine
|
||||
feste, nicht erweiterbare Anzahl von Logo-Slots je Mandant im Datenmodell hindeutet.
|
||||
Aussage: Die Software soll je Mandant eine feste Anzahl (acht) Firmenlogos unterstützen; eine
|
||||
Erweiterung erfordert eine Codeänderung, keine reine Konfiguration.
|
||||
Ergebnis: Ein Mandant kann nicht mehr als acht unterschiedliche Logos hinterlegen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Company/MandatorBL.cs:90-131 - Begründung:
|
||||
durchsetzende, hartkodierte Bereichsprüfung.
|
||||
Prüfidee: Speichern eines neunten Logos für einen Mandanten wird abgelehnt oder überschreibt ein
|
||||
bestehendes (Verhalten zu verifizieren).
|
||||
Tracelinks: SyRS-49
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: [HYPOTHESE] übernehmen (vorläufig) - ob acht Logos fachlich ausreichend sind
|
||||
(z. B. für Mandanten mit mehreren Marken), ist mit dem Fachbereich zu klären; im
|
||||
Zielsystem wäre eine unbegrenzte, konfigurierbare Anzahl naheliegend.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-30
|
||||
Titel: Getrennte Datenmodelle für Zählerimport aus DocuForm und interne Zählerhistorie
|
||||
Ebene: SwRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Persistenzschicht)
|
||||
Vorbedingung: keine
|
||||
Fakt: `DocuFormDeviceModel` (UI/DeviceClickCounter/DocuFormApiImport) und
|
||||
`AutomaticFacturaCounterHistory`/`AutomaticFacturaCounterToContract`
|
||||
(Sales/CustomerAssets/AutomaticFactura) sind getrennte Datenmodelle für importierte
|
||||
bzw. bereits verarbeitete Zählerstände - ein Transformationsschritt zwischen beiden ist
|
||||
notwendig, aber in dieser Iteration nicht im Detail nachvollzogen.
|
||||
Aussage: Die Software soll importierte Zählerstände aus docuFORM in das interne
|
||||
Abrechnungsdatenmodell transformieren, bevor sie in die Abrechnung einfließen.
|
||||
Ergebnis: Ein über docuFORM importierter Zählerstand ist nach der Transformation im internen
|
||||
Format für die automatisierte Fakturierung nutzbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Finances/DeviceClickCounter/DocuFormApiImport/DocuFormDeviceModel.cs,
|
||||
src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs:540-585 -
|
||||
Begründung: durchsetzende, aber getrennte Datenmodelle je Verarbeitungsschritt.
|
||||
Prüfidee: Ein über die docuFORM-API importierter Zählerstand ist nach dem Import als
|
||||
`AutomaticFacturaCounterHistory`-Eintrag auffindbar.
|
||||
Tracelinks: SyRS-17, SyRS-88
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Transformationsschritt ist fachlich notwendig, um externe Formate
|
||||
vom internen Abrechnungsmodell zu entkoppeln.
|
||||
Status: belegt
|
||||
```
|
||||
+3319
File diff suppressed because it is too large
Load Diff
+137
@@ -0,0 +1,137 @@
|
||||
# Traceability — c-entron ERP-Suite
|
||||
|
||||
Konsolidierte Forward-/Backward-Traceability über alle drei Ebenen. Jede Zeile entspricht einer
|
||||
SyRS-Anforderung mit ihrer/ihren übergeordneten StRS-Anforderung(en), den darauf aufbauenden
|
||||
SwRS-Anforderungen (sofern in dieser Iteration vertieft, sonst „-") und dem primären Artefaktbeleg
|
||||
(Kurzform; vollständige Begründung siehe jeweilige Anforderung in `SyRS.md`).
|
||||
|
||||
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg (Kurzform) |
|
||||
|---|---|---|---|
|
||||
| StRS-1 | SyRS-1 | - | src/backend/Centron.BL/Sales/CustomerAssets/Orders/OrderBL.cs:184-193 (`DoBeforeStore`) |
|
||||
| StRS-1 | SyRS-2 | - | src/backend/Centron.BL/ProductMatrix/ProductMatrixBL.cs (`SaveOrUpdateCustomerProductRating`, `GetCustomerProductMatrixRatingChangeLogByI3D`) |
|
||||
| StRS-1 | SyRS-3 | - | src/backend/Centron.BL/Mailings/MailingDataBL.cs (`SaveMailingData`, `SaveAttachements`) |
|
||||
| StRS-1 | SyRS-4 | - | src/centron/Centron.WPF.UI/Modules/Sales/SpecialArticleImport/SpecialArticleToContractExcelImportResultViewModel.cs |
|
||||
| StRS-1 | SyRS-5 | - | src/backend/Centron.BL/Accounts/Campaigns/CampaignPhaseActionBL.cs |
|
||||
| StRS-1 | SyRS-6 | - | src/backend/Centron.BL/Sales/Customers/CRM/CustomerCRMStatisticBL.cs |
|
||||
| StRS-1 | SyRS-7 | - | src/backend/Centron.BL/BusinessPartner/SearchSupplierBL.cs |
|
||||
| StRS-2 | SyRS-8 | SwRS-1 | src/backend/Centron.BL/Accounting/BankAccountBL.cs:52-63 |
|
||||
| StRS-2 | SyRS-9 | - | src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs:263-291 |
|
||||
| StRS-2 | SyRS-10 | - | src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs:736-763 |
|
||||
| StRS-2 | SyRS-11 | - | src/backend/Centron.BL/Sales/CustomerAssets/TimerBilling/TimerBillingBL.cs |
|
||||
| StRS-3 | SyRS-12 | SwRS-2 | src/backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningRunBL.cs:253-268 |
|
||||
| StRS-3 | SyRS-13 | SwRS-4 | src/backend/Centron.BL/Sales/Receipts/Invoices/Opos/OposBL.cs:28-36 |
|
||||
| StRS-3 | SyRS-14 | - | src/backend/Centron.BL/Transactions/TransactionBL.cs |
|
||||
| StRS-2 | SyRS-15 | SwRS-6 | src/backend/Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs:315-320,369 |
|
||||
| StRS-2 | SyRS-16 | - | src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ContractBL.cs |
|
||||
| StRS-2 | SyRS-17 | SwRS-5, SwRS-30 | src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ClickContracts/DeviceClickCounterBL.cs:250-253,371 |
|
||||
| StRS-2 | SyRS-18 | - | src/centron/Centron.WPF.UI/Modules/Finances/ProductLifecycleManagement |
|
||||
| StRS-2 | SyRS-19 | - | src/centron/Centron.WPF.UI/Modules/Finances/Projects |
|
||||
| StRS-2 | SyRS-20 | - | src/backend/Centron.BL/Sales/CustomerAssets/Contracts/ClickContracts/MasterDataListBL.cs |
|
||||
| StRS-3 | SyRS-21 | - | src/backend/Centron.BL/VoucherManagement/VoucherManagementBL.cs:17-24 |
|
||||
| StRS-2 | SyRS-22 | SwRS-1 | src/backend/Centron.BL/Accounting/BankAccountBL.cs:67-160 (`SaveBankAccount`, `DeleteBankAccount`) |
|
||||
| StRS-3 | SyRS-23 | SwRS-12 | src/backend/Centron.BL/WebServices/Administration/Documents/SepaContracts/SepaContractWebServiceBL.cs:56-85 |
|
||||
| StRS-2 | SyRS-24 | - | src/centron/Centron.WPF.UI/Modules/Purchasing/TravelExpense |
|
||||
| StRS-4 | SyRS-25 | - | src/backend/Centron.BL/Buying/External/DistributorBL.cs:38-44 |
|
||||
| StRS-4 | SyRS-26 | - | src/backend/Centron.BL/EDI/EDIDispatcherBL.cs:56-98 |
|
||||
| StRS-4 | SyRS-27 | SwRS-17 | src/backend/Centron.BL/Purchasing/OrderSuggestionList/OrderSuggestionListBL.cs:139-158 |
|
||||
| StRS-1, StRS-4 | SyRS-28 | - | src/backend/Centron.BL/BusinessPartner/SearchSupplierBL.cs (siehe SyRS-7) |
|
||||
| StRS-5 | SyRS-29 | SwRS-27 | src/backend/Centron.BL/Warehousing/BarcodeBL.cs:73-93,171 |
|
||||
| StRS-5 | SyRS-30 | - | src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleImportBL.cs |
|
||||
| StRS-5 | SyRS-31 | SwRS-25 | src/backend/Centron.BL/Warehousing/ArticleUnitBL.cs:21-35,51-65 |
|
||||
| StRS-5 | SyRS-32 | SwRS-28 | src/backend/Centron.BL/Warehousing/ArticleManagement/ArticleEANCodeBL.cs:16-53 |
|
||||
| StRS-5 | SyRS-33 | - | src/backend/Centron.BL/Warehousing/CommissioningManagement/CommissioningBL.cs:45-75 |
|
||||
| StRS-5 | SyRS-34 | SwRS-26 | src/backend/Centron.BL/Warehousing/InventoryManagement/InventoryBL.cs:75-102,137-143 |
|
||||
| StRS-5 | SyRS-35 | - | src/backend/Centron.BL/Warehousing/External/DistributorMaterialGroupToMaterialGroupBL.cs |
|
||||
| StRS-5 | SyRS-36 | - | src/backend/Centron.BL/Logistics/Warehousing/StockBL.cs:82-109 |
|
||||
| StRS-3, StRS-5 | SyRS-37 | - | src/centron/Centron.WPF.UI/Modules/Warehousing/OutcomingPayments |
|
||||
| StRS-5 | SyRS-38 | - | src/backend/Centron.BL/Warehousing/StockManagement/ArticleStockBL.cs:74 (`UpdateArticlePurchasePrice`) |
|
||||
| StRS-5 | SyRS-39 | - | src/apis/Centron.Api.Gls, src/apis/Centron.Api.Shipcloud |
|
||||
| StRS-6 | SyRS-40 | - | src/centron/Centron.WPF.UI/Modules/Rma/NewRma, SendBack, SendForth |
|
||||
| StRS-7 | SyRS-41 | SwRS-18 | src/backend/Centron.BL/Production/ProductionOrderBL.cs:25-45,102-127,184-211 |
|
||||
| StRS-7 | SyRS-42 | - | src/backend/Centron.BL/Production/ProductionOrderBL.cs:194-212 |
|
||||
| StRS-2, StRS-7 | SyRS-43 | - | src/backend/Centron.BL/Finances/ProductLifecycleBL.cs:23-55 |
|
||||
| StRS-7 | SyRS-44 | - | src/centron/Centron.WPF.UI/Modules/QM/Settings/AssetReasonSettingsViewModel.cs |
|
||||
| StRS-8 | SyRS-45 | - | src/backend/Centron.BL/Projects/ProjectBL.cs:17-23 (`GetProjectList`) |
|
||||
| StRS-8 | SyRS-46 | - | src/centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference |
|
||||
| StRS-8 | SyRS-47 | SwRS-23 | src/backend/Centron.BL/MassUpdate/MassUpdateBL.cs:238-501 |
|
||||
| StRS-8 | SyRS-48 | - | src/backend/Centron.BL/Warehousing/CostCenterBL.cs |
|
||||
| StRS-9 | SyRS-49 | SwRS-29 | src/backend/Centron.BL/Administration/Company/MandatorBL.cs:49-131 |
|
||||
| StRS-9 | SyRS-50 | SwRS-24 | src/backend/Centron.BL/Administration/Employees/EmployeeDepartmentBL.cs:20-45 |
|
||||
| StRS-9 | SyRS-51 | - | src/backend/Centron.BL/CountryArea/CountryBL.cs |
|
||||
| StRS-9 | SyRS-52 | - | src/centron/Centron.WPF.UI/Modules/Administration/ServiceAndLeasing |
|
||||
| StRS-9 | SyRS-53 | - | src/centron/Centron.WPF.UI/Modules/Administration/ReceiptConditions |
|
||||
| StRS-2, StRS-9 | SyRS-54 | - | src/centron/Centron.WPF.UI/Modules/Administration/HourlySurchargeRates |
|
||||
| StRS-9 | SyRS-55 | - | src/backend/Centron.BL/TextModuleArea/TextModuleBL.cs |
|
||||
| StRS-9 | SyRS-56 | - | src/centron/Centron.WPF.UI/Modules/Administration/ReportServer |
|
||||
| StRS-9, StRS-14 | SyRS-57 | - | src/centron/Centron.WPF.UI/Modules/Administration/WebServiceSettings |
|
||||
| StRS-9, StRS-16 | SyRS-58 | - | src/backend/Centron.BL/ExternalToolsBL/* |
|
||||
| StRS-9, StRS-12 | SyRS-59 | - | src/centron/Centron.WPF.UI/Modules/Administration/MailAndCalender, MailTemplates |
|
||||
| StRS-9, StRS-12 | SyRS-60 | - | src/centron/Centron.WPF.UI/Modules/Administration/PhoneSettings |
|
||||
| StRS-9, StRS-11 | SyRS-61 | - | src/centron/Centron.WPF.UI/Modules/Administration/EscalationsSettings |
|
||||
| StRS-9 | SyRS-62 | - | src/centron/Centron.WPF.UI/Modules/Administration/TaskManagmentSettings |
|
||||
| StRS-9, StRS-14 | SyRS-63 | - | src/centron/Centron.WPF.UI/Modules/Administration/WebCart |
|
||||
| StRS-9 | SyRS-64 | - | src/centron/Centron.WPF.UI/Modules/Administration/UpdateAvailableNotificationSettings |
|
||||
| StRS-9, StRS-10 | SyRS-65 | SwRS-19 | src/backend/Centron.BL/Administration/SQLManagement/SQLManagementBL.cs:17-111 |
|
||||
| StRS-10 | SyRS-66 | SwRS-3 | src/backend/Centron.BL/Administration/DataSecurity/DataSecurityBL.cs:377-390,787-858,935-938,996-999,1077-1080 |
|
||||
| StRS-9, StRS-10 | SyRS-67 | SwRS-10 | src/backend/Centron.BL/Security/PdfSigningBL.cs:60-92 |
|
||||
| StRS-9 | SyRS-68 | - | src/centron/Centron.WPF.UI/Modules/Administration/PdfExport |
|
||||
| StRS-10 | SyRS-69 | SwRS-7 | src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:95-135,348-376 |
|
||||
| StRS-10 | SyRS-70 | SwRS-8 | src/backend/Centron.BL/Administration/Logins/Auth/AuthenticatorFactory.cs:44-100 |
|
||||
| StRS-10 | SyRS-71 | SwRS-9 | src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:43-54 |
|
||||
| StRS-11 | SyRS-72 | - | src/backend/Centron.BL/Sales/Support/TicketProcess/TicketProcessBL.cs:26-40 |
|
||||
| StRS-11 | SyRS-73 | - | src/backend/Centron.BL/Sales/Support/TicketProcess/TicketProcessBL.cs:55-107 |
|
||||
| StRS-11 | SyRS-74 | - | src/backend/Centron.BL/CheckListArea/ChangeTracking/ChangeLogBL.cs |
|
||||
| StRS-11 | SyRS-75 | - | src/backend/Centron.BL/ExpectedEvents/ExpectedEventsBL.cs:22-142 |
|
||||
| StRS-11 | SyRS-76 | - | src/centron/Centron.WPF.UI/Modules/Helpdesk/TaskManagement |
|
||||
| StRS-11 | SyRS-77 | - | src/centron/Centron.WPF.UI/Modules/Helpdesk/Dashboard |
|
||||
| StRS-11 | SyRS-78 | - | src/backend/Centron.BL/Sales/Support/HelpdeskConnectionNumberBL.cs |
|
||||
| StRS-11 | SyRS-79 | - | src/backend/Centron.BL/SelfCare/SelfCareBL.cs:82-149 |
|
||||
| StRS-11 | SyRS-80 | - | src/backend/Centron.BL/ExternalHelpdesk/ExternalHelpdeskConfigurationBL.cs |
|
||||
| StRS-12 | SyRS-81 | SwRS-10 | src/backend/Centron.BL/MailScanner/MailScannerBL.cs:57-110 |
|
||||
| StRS-12 | SyRS-82 | SwRS-11 | src/backend/Centron.BL/Chats/ChatBL.cs:112-137,150-170,202-220 |
|
||||
| StRS-12 | SyRS-83 | - | src/backend/Centron.BL/Tapi/PhoneCallBL.cs |
|
||||
| StRS-11, StRS-12 | SyRS-84 | - | src/backend/Centron.BL/Calendar/CalendarBL.cs:91-107,179 (`AppointmentsForTicketsSettings`) |
|
||||
| StRS-12 | SyRS-85 | - | src/backend/Centron.BL/ToDoArea/IToDoObjectKind.cs, ToDoBL.cs |
|
||||
| StRS-13 | SyRS-86 | - | src/backend/Centron.BL/DataExchange/BookKeeping/BookKeepingExportBL.cs:196-227 |
|
||||
| StRS-13 | SyRS-87 | SwRS-13 | src/backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs:56-65 |
|
||||
| StRS-13 | SyRS-88 | SwRS-30 | src/backend/Centron.BL/DataExchange/DocuForm/DocuFormApiSettingsBL.cs |
|
||||
| StRS-13 | SyRS-89 | - | src/backend/Centron.BL/DataExchange/Rmm/RmmConnectionSettingsBL.cs |
|
||||
| StRS-13 | SyRS-90 | - | src/centron/Centron.WPF.UI/Modules/DataExchange/SupplierOrderPerBranch |
|
||||
| StRS-13 | SyRS-91 | - | src/centron/Centron.WPF.UI/Modules/DataExchange/Connectors |
|
||||
| StRS-13 | SyRS-92 | - | src/backend/Centron.BL/DataExchange/TelekomDive/TelekomDiveBL.cs |
|
||||
| StRS-13 | SyRS-93 | - | src/backend/Centron.BL/Integrations/* |
|
||||
| StRS-13 | SyRS-94 | SwRS-20 | src/apis/Centron.APIs.FinAPI/Data/BankConnectionInterfaceAisConsent.cs |
|
||||
| StRS-13 | SyRS-95 | - | src/apis/Centron.APIs.ITscopeDataAccess, IcecatDataAccess, CopDataAccess, EgisDataAccess |
|
||||
| StRS-13 | SyRS-96 | - | src/apis/Centron.Api.Gls/*, src/apis/Centron.Api.Shipcloud/* |
|
||||
| StRS-13 | SyRS-97 | SwRS-14 | src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:22-25 |
|
||||
| StRS-4, StRS-13 | SyRS-98 | - | src/backend/Centron.BL/TradePool/TradePoolBL.cs, RiverDivo/RiverDivoBL.cs, CPra/CPraConnectorBL.cs |
|
||||
| StRS-14 | SyRS-99 | - | src/nexus/CentronNexus/DocumentSigning/* |
|
||||
| StRS-10, StRS-14 | SyRS-100 | SwRS-22 | src/nexus/CentronNexus/Management/WebAccount/Model/WebRightNode.cs |
|
||||
| StRS-14 | SyRS-101 | - | src/nexus/CentronNexus.OutlookAddIn/CRM/*, Belege/* |
|
||||
| StRS-14 | SyRS-102 | - | src/webservice/Centron.Host.Console, Centron.Host.WindowsService |
|
||||
| StRS-13 | SyRS-103 | - | src/backend/Centron.Gateway/DataExchange/BookKeeping/Abacus/BookKeepingExportAbacus.cs |
|
||||
| StRS-15 | SyRS-104 | - | src/backend/Centron.BL/ReportEngine/PdfStategy/IPdfStrategy.cs |
|
||||
| StRS-15 | SyRS-105 | - | src/backend/Centron.BL/Statistics/Sales/Receipts/InvoiceStatisticBL.cs |
|
||||
| StRS-15 | SyRS-106 | - | src/centron/Centron.WPF.UI/Modules/Dashboard |
|
||||
| StRS-15 | SyRS-107 | SwRS-16 | src/backend/Centron.BL/IndexSearch/IndexSearchBL.cs:44-75 |
|
||||
| StRS-15 | SyRS-108 | SwRS-15 | src/backend/Centron.DAO/ChangeTracking/ChangeTrackingEventListener.cs |
|
||||
| StRS-15 | SyRS-109 | - | src/backend/Centron.BL/Telemetry/TelemetryBL.cs |
|
||||
| StRS-16 | SyRS-110 | - | src/backend/Centron.BL/ArtificialIntelligence/ApiClientFactory.cs |
|
||||
| StRS-16 | SyRS-111 | - | src/backend/Centron.BL/Finances/OnlineBanking/OnlineBankingFinApiBL.cs:29-63 |
|
||||
| StRS-16 | SyRS-112 | - | src/centron/Centron.WPF.UI/Modules/Survey/Pages/Categories, Question, Analyse |
|
||||
| StRS-16 | SyRS-113 | - | src/backend/Centron.BL/Sales/Support/ExternalToolsReplacementBL.cs |
|
||||
| StRS-17 | SyRS-114 | SwRS-21 | src/backend/Centron.Entities/Entities/Sales/DocumentationWizardArea/Data/NetworkComponentDataPrinter.cs:3-7 |
|
||||
| StRS-18 | SyRS-115 | - | src/backend/Centron.BL/SocialMedia/SocialNetworks/PersonSocialNetworkBL.cs |
|
||||
| StRS-18 | SyRS-116 | - | src/backend/Centron.BL/Notifications/UserNotificationBL.cs |
|
||||
| StRS-18 | SyRS-117 | - | src/backend/Centron.BL/Tags/TagsBL.cs |
|
||||
| StRS-18, StRS-20 | SyRS-118 | - | src/backend/Centron.BL/Storage/StorageBL.cs |
|
||||
| StRS-19 | SyRS-119 | - | deployment/WixSharpInstaller/*, docker/compose/* |
|
||||
| StRS-20 | SyRS-120 | - | src/shared/Centron.Controls/*, src/shared/Centron.Core/* |
|
||||
|
||||
## Hinweis
|
||||
|
||||
Zusätzliche SwRS-Anforderungen ohne direkten Bezug zu genau einer SyRS-Zeile (z. B. SwRS-30, das sowohl
|
||||
SyRS-17 als auch SyRS-88 referenziert) erscheinen in der Spalte SwRS-ID mehrfach - siehe die
|
||||
Tracelinks-Felder in `SwRS.md` für die vollständige, bidirektionale Zuordnung. Alle in dieser Tabelle
|
||||
referenzierten IDs existieren in `StRS.md`, `SyRS.md` bzw. `SwRS.md` (siehe Konsistenzcheck in
|
||||
`Analysebericht.md`).
|
||||
+252
@@ -0,0 +1,252 @@
|
||||
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Prompt-Version 02
|
||||
|
||||
## Lauf
|
||||
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
|
||||
- **Prompt-Version:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
|
||||
vorhandene Prompt-Versionsnummer" (`02_Prompt.md` vor `01_Prompt.md`). Erster Lauf unter dieser Fassung.
|
||||
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
|
||||
- **Startzeit:** 2026-08-26T08:43:29.6188327+02:00
|
||||
- **Endzeit:** 2026-08-26T09:28:33.9880946+02:00
|
||||
- **Dauer gesamt:** 00:45:04 (`duration_ms` 00:45:02; API: 00:42:01)
|
||||
- **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);
|
||||
Remote entkoppelt: siehe Anmerkung 2 – die Codebasis ist seit Commit `f045b99a` kein
|
||||
eigenes Repository mehr, sondern Teil des Arbeitsrepos
|
||||
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
|
||||
|
||||
## Werkzeugkonfiguration
|
||||
- **Skill-Version:** 4.2.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-sonnet-5`
|
||||
- **Modelle (tatsächlich eingesetzt):** `claude-sonnet-5` 35.706.774 Tokens (99,98 %),
|
||||
`claude-haiku-4-5-20251001` 6.969 Tokens (0,02 %, interne Hilfsaufrufe)
|
||||
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als
|
||||
zulässiger interner Hilfsaufruf
|
||||
- **Effort:** `high` (per `--effort high` gesetzt)
|
||||
- **Laufverzeichnis-ID:** `v4.2.0-d6f9`
|
||||
- **Ablage:** `Iteration 2/claude-sonnet-5/solo/high/`
|
||||
- **Parallele Läufe:** nein – Zeitangaben sind für Laufzeitvergleiche verwendbar
|
||||
- **Agentenmodus:** `solo` (V1)
|
||||
- **Kontextfenster:** 1.000.000 Tokens (`modelUsage.claude-sonnet-5.contextWindow`);
|
||||
`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 | 298 |
|
||||
| Output-Tokens | 259.774 (davon 55.760 Thinking-Tokens) |
|
||||
| Cache-Write-Tokens | 400.818 |
|
||||
| Cache-Read-Tokens | 35.045.884 |
|
||||
| Agent-Turns | 149 |
|
||||
|
||||
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
|
||||
| Messgröße | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|
||||
|---|---:|---:|---:|
|
||||
| Input-Tokens | 298 | 6.945 | 7.243 |
|
||||
| Output-Tokens | 259.774 | 24 | 259.798 |
|
||||
| Cache-Write-Tokens | 400.818 | 0 | 400.818 |
|
||||
| Cache-Read-Tokens | 35.045.884 | 0 | 35.045.884 |
|
||||
| **Tokens gesamt** | **35.706.774** | **6.969** | **35.713.743** |
|
||||
|
||||
**Tokens gesamt: 35.713.743** — 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 | 20 | 11,8 % |
|
||||
| SyRS | 120 | 70,6 % |
|
||||
| SwRS | 30 | 17,6 % |
|
||||
| **Gesamt** | **170** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 88 | 51,8 % |
|
||||
| Sicherheit | 27 | 15,9 % |
|
||||
| Daten | 27 | 15,9 % |
|
||||
| Schnittstelle | 22 | 12,9 % |
|
||||
| nicht-funktional | 6 | 3,5 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 182 |
|
||||
| davon `PRIMÄR` | 148 (81,3 %) |
|
||||
| davon `SEKUNDÄR` | 30 (16,5 %) |
|
||||
| davon `KONTEXT` | 4 (2,2 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (85,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 161 | 94,7 % |
|
||||
| workaround | 5 | 2,9 % |
|
||||
| sonderfall | 4 | 2,4 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 146 | 85,9 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 24 | 14,1 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 38 | 22,4 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 6 | 3,5 % |
|
||||
|
||||
### 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 51 ungedeckt: SyRS-19 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 170 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 170 von 170 mit Tracelinks (100,0 %) |
|
||||
|
||||
|
||||
## Ergebnis
|
||||
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`,
|
||||
`terminal_reason` = `completed`)
|
||||
- **Session-ID:** `0798726e-a12b-4ae5-80da-df9820a08a8b`
|
||||
- **Permission-Denials:** 2 (1 × `Read`, 1 × `Bash`) – **keine davon auf `Task`/`Agent`/`Workflow`**.
|
||||
Der Agent hat in diesem Lauf zu keinem Zeitpunkt zu delegieren versucht; die Modus-Sperre wurde
|
||||
nie ausgelöst. Aufschlüsselung:
|
||||
- `Read` auf `\tmp\syrs_belege.txt` – Zugriff außerhalb der freigegebenen Verzeichnisse.
|
||||
Der Agent hatte zuvor eine Zwischendatei unter `/tmp` abgelegt und wollte sie zurücklesen.
|
||||
- `Bash` auf ein `sed -i`-Kommando – Treffer der Denylist (`Bash(sed -i:*)`). Der Agent
|
||||
wollte damit vier Zeilen der Traceability-Tabelle korrigieren. Er ist auf einen anderen
|
||||
Weg ausgewichen; die vier Zeilen (SyRS-2, SyRS-22, SyRS-38, SyRS-84) stehen in
|
||||
`Ergebnisse\Traceability.md` vollständig und mit Belegpfad – **kein Ergebnisschaden**.
|
||||
- **Kontrolle Agentenmodus:** `subagent_stats.spawned` = 0 – Bedingung `solo` eingehalten
|
||||
- **Subagenten-Prompts:** entfällt (Modus `solo`)
|
||||
- **Erzeugte Dateien:** alle sieben vom Prompt geforderten Artefakte in `Ergebnisse\`:
|
||||
|
||||
| Datei | Größe |
|
||||
|---|---:|
|
||||
| `Analysebericht.md` | 40.014 B |
|
||||
| `StRS.md` | 28.393 B |
|
||||
| `SyRS.md` | 178.678 B |
|
||||
| `SwRS.md` | 51.848 B |
|
||||
| `Traceability.md` | 13.020 B |
|
||||
| `Hypothesen.md` | 9.799 B |
|
||||
| `Glossar.md` | 7.416 B |
|
||||
|
||||
- **Root unverändert:** ja – `before.txt` und `after.txt` sind beide leer (zeilenendennormalisiert
|
||||
verglichen). Siehe Anmerkung 2 zur Ermittlung.
|
||||
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
**1. CLI-Version gewechselt: 2.1.246 statt 2.1.245.** Der Werkzeugadapter des Skills wurde gegen
|
||||
2.1.245 entwickelt und verifiziert. Die für den Modus `solo` entscheidende Kontrolle
|
||||
(`subagent_stats.spawned` = 0) wurde für diesen Lauf gegengeprüft und ist erfüllt; die
|
||||
Feldnamen von `RawResult.json` sind unverändert. Ein Verhaltensunterschied ist nicht aufgefallen.
|
||||
|
||||
**2. Die Codebasis ist kein eigenes Repository mehr.** Seit Commit `f045b99a` („Codebasis als
|
||||
Dateien ins Arbeitsrepo statt als Gitlink") liegt der Snapshot als gewöhnliche Dateien im
|
||||
MasterArbeit-Repo. `git -C QuellCode/CentronERP status --porcelain` liefert deshalb den Status des
|
||||
**gesamten Arbeitsrepos** – im Moment rund 55 KB Ausgabe, praktisch ausschließlich Versuchsdateien.
|
||||
Der Vorher/Nachher-Vergleich wurde daher auf den Pfad eingeschränkt:
|
||||
`git -C c:\DEV\MasterArbeit status --porcelain -- QuellCode/CentronERP`. So gemessen war die
|
||||
Codebasis vor **und** nach dem Lauf sauber. Ohne diese Einschränkung hätte die Prüfung jede
|
||||
Änderung an den Versuchsordnern fälschlich als Codebasis-Änderung gemeldet.
|
||||
Folgen für die Versuchsbedingung: Das Feld „Remote entkoppelt" trifft in der ursprünglichen Form
|
||||
nicht mehr zu – das Remote des Arbeitsrepos ist `origin` (Gitea), das GitHub-Remote der Codebasis
|
||||
existiert nicht mehr. Der Snapshot bleibt inhaltlich eingefroren; im Lauf wurde nichts an ihm
|
||||
verändert.
|
||||
|
||||
**3. Erster Lauf unter Prompt-Version 02 – der Vergleich mit Prompt-Version 01 ist deutlich.**
|
||||
Dieselbe Zelle (`claude-sonnet-5` / `solo` / `high`) unter Prompt-Version 01, Tag 1:
|
||||
|
||||
| Lauf | Anforderungen | `PRIMÄR`-Anteil | Hypothesen | Tokens gesamt |
|
||||
|---|---:|---:|---:|---:|
|
||||
| `173142_v3.2.0-496c` | 42 | 73,7 % | 26,2 % | 4.357.855 |
|
||||
| `173143_v3.2.0-2bc6` | 82 | 82,0 % | 2,4 % | 12.598.503 |
|
||||
| `180416_v3.3.0-5851` | 60 | 62,2 % | 25,0 % | 5.659.692 |
|
||||
| `180417_v3.3.0-664e` | 73 | 84,6 % | 11,0 % | 4.591.733 |
|
||||
| `180418_v3.3.0-b676` | 67 | 56,3 % | 4,5 % | 5.050.595 |
|
||||
| **dieser Lauf (Prompt-Version 02)** | **170** | **81,3 %** | **14,1 %** | **35.713.743** |
|
||||
|
||||
Die Anforderungszahl liegt mit 170 über dem Doppelten des besten Laufs der Vergleichszelle, der
|
||||
Tokenverbrauch beim 2,8-fachen des bisherigen Maximums dieser Zelle. Beides ist mit den
|
||||
Prompt-Änderungen erklärbar: Das verbindliche Modulinventar (Schritt 0) führte zu **120 Modulen**,
|
||||
die Mindestabdeckung (Schritt 0b) erzwingt daraus mindestens 120 SyRS-Anforderungen – der Lauf hat
|
||||
genau 120 SyRS-Anforderungen erzeugt, also exakt eine je Modul, und die 30 SwRS-Anforderungen als
|
||||
Vertiefung nach Risiko (Schritt 0c) darauf aufgesetzt. Die Streuung, die Prompt-Version 01 kennzeichnete
|
||||
(Faktor 5,9 über alle Läufe), ist damit an einer Stelle strukturell gebunden. **Ein einzelner Lauf
|
||||
belegt das noch nicht** – für die Aussage „Prompt-Version 02 stabilisiert die Menge" braucht es
|
||||
Wiederholungen in derselben Zelle.
|
||||
|
||||
**4. Abdeckung erreicht, keine unanalysierten Module.** Der Analysebericht führt 120 Module mit
|
||||
Einstufung: 32 `tief`, 63 `mittel`, 25 `flach`, **0 `nicht analysiert`**. Unter Prompt-Version 01 waren
|
||||
je Lauf 55 bis 60 von rund 85 identifizierten Modulen unanalysiert geblieben – der Befund, der die
|
||||
Prompt-Änderung ausgelöst hatte. Der Agent hat das Inventar dabei selbst feiner geschnitten als
|
||||
Prompt-Version 01 (120 statt rund 85 Module) und dem Bericht einen Abschnitt
|
||||
„Hinweis zur Granularität des Inventars" vorangestellt.
|
||||
|
||||
**5. Ein Verstoß gegen die risikobasierte Priorisierung – abweichend von der Selbstauskunft des
|
||||
Agenten.** Die maschinelle Prüfung findet 51 risikorelevante Anforderungen (Sicherheit,
|
||||
Abrechnung, Berechtigungen), davon **eine ungedeckt: SyRS-19** – weder `PRIMÄR`-Beleg noch
|
||||
`[HYPOTHESE]`. Der Agent berichtet im Abschlusstext dagegen „all 36 risk-classified requirements"
|
||||
als gedeckt und nennt zwei im eigenen Konsistenzcheck gefundene und behobene Lücken (SyRS-54,
|
||||
SyRS-57). Die Differenz liegt in der Abgrenzung: Der Agent zählt 36 selbst als risikorelevant
|
||||
klassifizierte Anforderungen, das Prüfskript kommt über den Typ auf 51. SyRS-19 fällt in die
|
||||
Differenzmenge. Der Selbst-Konsistenzcheck des Agenten – als Prompt-Änderung neu eingeführt – hat
|
||||
also gegriffen, aber gegen den engeren eigenen Risikobegriff.
|
||||
|
||||
**6. Hypothesenführung deckungsgleich.** 24 Anforderungen sind als `[HYPOTHESE]` markiert (14,1 %),
|
||||
und `Hypothesen.md` führt dieselben 24. Unter Prompt-Version 01 waren Sammeldatei und Inline-Markierungen
|
||||
mehrfach auseinandergelaufen; die Kalibrierung im Prompt hat hier gewirkt.
|
||||
|
||||
**7. ISO-25010-Qualitätsmerkmal weiterhin schwach besetzt.** Nur 6 von 170 Anforderungen (3,5 %)
|
||||
führen das neu eingeführte Feld `Qualitätsmerkmal`. Das entspricht exakt der Zahl der als
|
||||
`nicht-funktional` typisierten Anforderungen (6) – der Agent hat das Feld also konsequent, aber
|
||||
nur dort gesetzt. Ob das der Absicht des Prompts entspricht oder ob auch Sicherheits- und
|
||||
Datenanforderungen eine ISO-25010-Zuordnung tragen sollten, ist beim nächsten Prompt-Zuschnitt
|
||||
zu klären.
|
||||
|
||||
**8. Belege je Anforderung: Median 1,0.** 182 Belege auf 170 Anforderungen. Die verschärfte
|
||||
Belegpflicht ist erfüllt (0 Anforderungen ohne Beleg) und der `PRIMÄR`-Anteil liegt mit 81,3 %
|
||||
im oberen Bereich der Vergleichsläufe – die *Anzahl* der Belege je Anforderung bleibt aber niedrig.
|
||||
Der Befund aus Prompt-Version 01 („45,9 % aller Anforderungen trugen genau einen Beleg") hat sich damit
|
||||
nicht aufgelöst, sondern verschärft.
|
||||
|
||||
**9. `Stderr.log` ist leer.** Keine Trust-Warnung, keine Fehlermeldung – der Snapshot ist sauber.
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"is_error":false,"duration_api_ms":2521428,"num_turns":149,"stop_reason":"end_turn","session_id":"0798726e-a12b-4ae5-80da-df9820a08a8b","total_cost_usd":11.217849799999998,"usage":{"input_tokens":298,"cache_creation_input_tokens":400818,"cache_read_input_tokens":35045884,"output_tokens":259774,"output_tokens_details":{"thinking_tokens":55760},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":400818,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":731,"cache_read_input_tokens":400501,"cache_creation_input_tokens":317,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":317},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6945,"outputTokens":24,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007065,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-sonnet-5":{"inputTokens":298,"outputTokens":259774,"cacheReadInputTokens":35045884,"cacheCreationInputTokens":400818,"webSearchRequests":0,"costUSD":11.210784799999997,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-sonnet-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[{"tool_name":"Read","tool_use_id":"toolu_01VJ5XH9MAEJgE8EvKtVv77i","tool_input":{"file_path":"\\tmp\\syrs_belege.txt"}},{"tool_name":"Bash","tool_use_id":"toolu_01Sve5xiy98QPkgm81F3H8Et","tool_input":{"command":"cd /tmp && sed -i \\\n -e '2s/.*/| StRS-1 | SyRS-2 | - | src\\/backend\\/Centron.BL\\/ProductMatrix\\/ProductMatrixBL.cs (SaveOrUpdateCustomerProductRating, GetCustomerProductMatrixRatingChangeLogByI3D) |/' \\\n -e '22s/.*/| StRS-2 | SyRS-22 | SwRS-1 | src\\/backend\\/Centron.BL\\/Accounting\\/BankAccountBL.cs:67-160 (SaveBankAccount, DeleteBankAccount) |/' \\\n -e '38s/.*/| StRS-5 | SyRS-38 | - | src\\/backend\\/Centron.BL\\/Warehousing\\/StockManagement\\/ArticleStockBL.cs:74 (UpdateArticlePurchasePrice) |/' \\\n -e '84s/.*/| StRS-11, StRS-12 | SyRS-84 | - | src\\/backend\\/Centron.BL\\/Calendar\\/CalendarBL.cs:91-107,179 (AppointmentsForTicketsSettings) |/' \\\n trace_clean2.txt\nsed -n '2p;22p;38p;84p' trace_clean2.txt","description":"Fix truncated rows in traceability table"}}],"terminal_reason":"completed","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":null,"result":"The run is complete. All seven required output files are in place in `Ergebnisse/`:\n\n- **Analysebericht.md** — 120-module inventory (Schritt 0), coverage table (32 tief / 63 mittel / 25 flach / 0 nicht analysiert), consistency check, risk-requirement list, and self-assessment\n- **StRS.md** — 20 stakeholder-level requirements grouped by business domain\n- **SyRS.md** — 120 requirements, one per inventory module (minimum coverage, Schritt 0b)\n- **SwRS.md** — 30 requirements deepening the risk areas (Schritt 0c)\n- **Traceability.md** — full StRS↔SyRS↔SwRS↔artifact table\n- **Hypothesen.md** — the 24 `[HYPOTHESE]`-tagged requirements, verified to match inline markings exactly\n- **Glossar.md** — domain terminology\n\nAutomated checks confirmed: no duplicate IDs, no missing mandatory fields, no dangling tracelinks, every requirement has at least one justified evidence entry, and all 36 risk-classified requirements carry either a PRIMÄR beleg or an explicit HYPOTHESE marking (two gaps found during the consistency pass — SyRS-54, SyRS-57 — were fixed with real evidence rather than just flagged).\n\nThe most significant finding: the DSGVO deletion routines (`DoDeleteCustomer`/`DoDeleteSupplier`/`DoDeleteAccount`/`DoDeleteContactManagementContact`) are implemented as `throw new NotImplementedException(...)` despite correct surrounding rights-checks and audit logging — a legally relevant gap flagged as top priority (SyRS-66/SwRS-3). The prompt's own consolidation example (printer \"Stammblätter\" vs. Assets) was traced to concrete, unrelated data models (`NetworkComponentDataPrinter` vs. `AssetManagementArticleAssignment`), and several other consolidation candidates and security inconsistencies (e.g., one unencrypted credential field amid otherwise-encrypted ones) were surfaced along the way.","ttft_ms":2262,"ttft_stream_ms":1109,"time_to_request_ms":33,"type":"result","duration_ms":2702667,"uuid":"7642e9d4-171c-4ad9-9cb9-d1112b93718d","queued_turn_count":0}
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+3244
File diff suppressed because it is too large
Load Diff
+64
@@ -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 | 20 | 11,8 % |
|
||||
| SyRS | 120 | 70,6 % |
|
||||
| SwRS | 30 | 17,6 % |
|
||||
| **Gesamt** | **170** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 88 | 51,8 % |
|
||||
| Sicherheit | 27 | 15,9 % |
|
||||
| Daten | 27 | 15,9 % |
|
||||
| Schnittstelle | 22 | 12,9 % |
|
||||
| nicht-funktional | 6 | 3,5 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 182 |
|
||||
| davon `PRIMÄR` | 148 (81,3 %) |
|
||||
| davon `SEKUNDÄR` | 30 (16,5 %) |
|
||||
| davon `KONTEXT` | 4 (2,2 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 145 (85,3 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 161 | 94,7 % |
|
||||
| workaround | 5 | 2,9 % |
|
||||
| sonderfall | 4 | 2,4 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 146 | 85,9 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 24 | 14,1 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 38 | 22,4 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 6 | 3,5 % |
|
||||
|
||||
### 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 51 ungedeckt: SyRS-19 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 170 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 170 von 170 mit Tracelinks (100,0 %) |
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+177
@@ -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\Tag 2\claude-sonnet-5\solo\high\02_Lauf_2026-08-26_084301_v4.2.0-d6f9\Ergebnisse\`.
|
||||
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T09:28:33.9880946+02:00
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T08:43:29.6188327+02:00
|
||||
+299
@@ -0,0 +1,299 @@
|
||||
# Analysebericht
|
||||
|
||||
## 0. Vorgehen dieses Laufs
|
||||
|
||||
Bevor die erste Anforderung formuliert wurde, ist die gesamte Codebasis strukturell erfasst worden (Schritt 0 - Modulinventar, unten). Die Codebasis gliedert sich in sechs Solution-Bereiche unter `src/`:
|
||||
|
||||
- `centron/Centron.WPF.UI` - WPF-Desktop-Hauptanwendung, 29 Fachmodule, 15.554 `.cs`- und 1.233 `.xaml`-Dateien (mit Abstand größter Teil der Codebasis)
|
||||
- `nexus/CentronNexus` + `CentronNexus.OutlookAddIn` + `CentronNexus.Host` - Blazor-Web-/SaaS-Anwendung
|
||||
- `backend/{Centron.BL, Centron.Entities, Centron.DAO, Centron.Interfaces, Centron.Gateway, Centron.Common}` - Geschäftslogik- und Datenschicht
|
||||
- `webservice/{Centron.WebServices.Core, Centron.Controllers, Centron.Host*, c-entron.misc.ConnectionManager}` - zentrale REST-API-/Serverschicht
|
||||
- `apis/*` - 8 eigenständige externe API-Integrationsprojekte
|
||||
- `shared/{Centron.Controls, Centron.Controls.Preview, Centron.Core}` - schichtenübergreifend genutzte Bibliotheken
|
||||
|
||||
Ergänzend wurden `docker/`, `azure-blazor/*.yaml` (CI/CD) und `deployment/` als Betriebsartefakte einbezogen.
|
||||
|
||||
Anschließend wurde je Modul mindestens eine Anforderung erstellt (Schritt 0b), bevor einzelne Module vertieft wurden (Schritt 0c). Vertiefung erfolgte gezielt in den Bereichen Sicherheitsregeln (Rechteverwaltung, Passwortmanager, 2FA), Abrechnungs-/Fakturierungslogik (Mahnwesen, Offene Posten, SEPA-Zahlungsverkehr, Provisionsabrechnung) und Berechtigungsprüfungen (serverseitige Rechteprüfungen in mehreren Business-Logic-Klassen).
|
||||
|
||||
**Interpretationsentscheidung zur Mindestabdeckung:** Der Auftrag verlangt „mindestens eine Anforderung" je Modul, ohne die Ebene (StRS/SyRS/SwRS) festzulegen. Da StRS-Anforderungen naturgemäß auf höherer fachlicher Flughöhe liegen (mehrere Module bündelnd) und SwRS-Anforderungen am dichtesten am Code liegen, wurde die Mindestabdeckung auf **SwRS-Ebene** sichergestellt (dort 1:1 nächste zum Modul) und über SyRS zu thematisch gebündelten StRS-Anforderungen konsolidiert. Jede der unten gelisteten 105 Inventarzeilen ist über mindestens eine SwRS-ID nachweisbar abgedeckt.
|
||||
|
||||
---
|
||||
|
||||
## 1. Modulinventar & Abdeckungstabelle (Schritt 0 / Abschlusstabelle)
|
||||
|
||||
Legende Abdeckung: **tief** = mehrere Anforderungen, überwiegend `PRIMÄR`-Belege, Code mehrfach im Detail gelesen · **mittel** = 1-2 Anforderungen mit mindestens einem konkreten Codebeleg (oft `PRIMÄR`), keine erschöpfende Detailanalyse · **flach** = 1 Anforderung, ausschließlich `SEKUNDÄR`-Belege (Verzeichnis-/Klassenstruktur), keine Detailanalyse · **nicht analysiert** = keine belegbare Anforderung möglich, mit Begründung.
|
||||
|
||||
### 1.1 Centron.WPF.UI - Administration & Rechteverwaltung
|
||||
|
||||
| # | Modul/Komponente | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | Administration (übrige Einstellungen) | `centron/Centron.WPF.UI/Modules/Administration/*` (28 Unterbereiche ohne Rechte/Mandant/DSGVO/Sepa) | Zentrale Konfiguration: Mitarbeiter, Mailvorlagen, PDF-Signatur, Reportserver, Textbausteine, Webservice-Zugänge u. a. | flach | 1 | StRS-4, SyRS-5, SwRS-5 |
|
||||
| 2 | RightsManagement | `.../Administration/RightsManagement` | Feingranulare, gruppenbasierte Rechteverwaltung inkl. Audit-Log | tief | 2 (+Querverweis Helpdesk) | StRS-1, SyRS-1/2, SwRS-1/2 |
|
||||
| 3 | MandatorManagement | `.../Administration/MandatorManagement` | Mandanten-/Filialverwaltung inkl. Nummernkreisen | mittel | 1 | StRS-2, SyRS-3, SwRS-3 |
|
||||
| 4 | DSGVO | `.../Administration/DSGVO` | AVV-Vorlagenverwaltung, Online-Signatur-Workflow | mittel | 1 | StRS-3, SyRS-4, SwRS-4 |
|
||||
| 5 | SepaContract | `.../Administration/SepaContract` | SEPA-Mandatsvorlagen und -verträge | mittel | 1 (Beleg via SepaContractWebServiceBL, s. StRS-3) | StRS-3, SyRS-4, SwRS-4 |
|
||||
|
||||
### 1.2 Centron.WPF.UI - Finanzen, Verträge & Abrechnung (Modul `Finances`, 1.664 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 6 | AccountManagement | `.../Finances/AccountManagement` | Buchhaltungskontenrahmen je Filiale | flach | 1 | SwRS-19 |
|
||||
| 7 | AutomatedBilling | `.../Finances/AutomatedBilling` | Wizard-gesteuerter automatisierter Abrechnungslauf | mittel | 1 | SwRS-11 |
|
||||
| 8 | Campaigns | `.../Finances/Campaigns` | Marketingkampagnen/Mailings | flach | 1 | SwRS-20 |
|
||||
| 9 | Common | `.../Finances/Common` | Technische Sammelklasse (1 Datei) | **nicht analysiert** | 0 | - Begründung: reine technische Hilfsklasse (`CommonLogik.cs`) ohne eigenständige fachliche Aussage; wird implizit von den konsumierenden Modulen mitabgedeckt. |
|
||||
| 10 | ContractEvaluation2 | `.../Finances/ContractEvaluation2` | Aktuelle Vertragsauswertung | flach | 1 | SwRS-14 |
|
||||
| 11 | ContractEvaluationOld | `.../Finances/ContractEvaluationOld` | Historische Vertragsauswertung (Konsolidierungskandidat) | mittel | 1 | SwRS-15 |
|
||||
| 12 | Contracts | `.../Finances/Contracts` | Vertragsverwaltung inkl. Kontingente | mittel | 1 | SwRS-21 |
|
||||
| 13 | Crm | `.../Finances/Crm` | Zentrale, domänenübergreifende Kundenakte (40 Reiter) | flach | 1 | SwRS-18 |
|
||||
| 14 | DeviceClickCounter | `.../Finances/DeviceClickCounter` | Zählerbasierte Klickabrechnung | mittel | 1 | SwRS-12 |
|
||||
| 15 | Dunning | `.../Finances/Dunning` | Mahnwesen mit Mahnstufen | **tief** | 2 | StRS-6, SyRS-6, SwRS-6/7 |
|
||||
| 16 | FlatrateBilling | `.../Finances/FlatrateBilling` | Pauschalabrechnung für Assets | flach | 1 | SwRS-13 |
|
||||
| 17 | MasterDataLists | `.../Finances/MasterDataLists` | „Stammblatt"-Geräteverwaltung (Konsolidierungsbeispiel) | **tief** | 1 (detailliert gelesen) | SwRS-24 |
|
||||
| 18 | Opos | `.../Finances/Opos` | Offene-Posten-Verwaltung | mittel | 1 | StRS-7, SyRS-7, SwRS-8 |
|
||||
| 19 | Payments | `.../Finances/Payments` | Zahlungseingang/-ausgang | flach | 1 | SwRS-17 |
|
||||
| 20 | ProductLifecycleManagement | `.../Finances/ProductLifecycleManagement` | Produktlebenszyklus-Kennzeichnung | flach | 1 | SwRS-22 |
|
||||
| 21 | Projects (Finances) | `.../Finances/Projects` | Projektkostenverfolgung inkl. Abschluss | flach | 1 | SwRS-23 |
|
||||
| 22 | Receipts | `.../Finances/Receipts` (sowie backend `BL/Sales/Receipts`) | Beleg-Kernlogik: Warenkorb-Freigabe, Kreditlimit | **tief** | 2 | StRS-10/11, SyRS-8, SwRS-9/10 |
|
||||
| 23 | TimerBilling | `.../Finances/TimerBilling` | Zeit-/Leistungsabrechnung | flach | 1 | SwRS-16 |
|
||||
|
||||
### 1.3 Centron.WPF.UI - Warenwirtschaft/Lager (Modul `Warehousing`, 426 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 24 | AssetBase (allgemein) | `backend/Centron.Entities/.../CustomerAssets/AssetBase.cs` | Allgemeine Hardware-Asset-Stammdaten | mittel | 1 | SwRS-25 |
|
||||
| 25 | ArticleImport | `.../Warehousing/ArticleImport` | Artikel-Dateiimport | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 26 | ArticleManagement | `.../Warehousing/ArticleManagement` | Ein-/Auslagerung, Umbuchung, EOL | mittel | 2 | SwRS-26/27 |
|
||||
| 27 | ArticleUnitManagement | `.../Warehousing/ArticleUnitManagement` | Mengeneinheiten | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 28 | BarcodeManagement | `.../Warehousing/BarcodeManagement` | Barcode-Generierung | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 29 | Commissioning | `.../Warehousing/Commissioning` | Kommissionierung (Picking) | flach | 1 | SwRS-28 |
|
||||
| 30 | Commissions | `.../Warehousing/Commissions` | Verkaufsprovisionsabrechnung | **tief** | 1 (4 Primärbelege) | StRS-21, SyRS-13, SwRS-29 |
|
||||
| 31 | Inventory | `.../Warehousing/Inventory` | Inventurabschluss | mittel | 1 (Teil von SwRS-26) | SwRS-26 |
|
||||
| 32 | MaterialGroupManagement | `.../Warehousing/MaterialGroupManagement` | Warengruppenverwaltung | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 33 | OutcomingPayments | `.../Warehousing/OutcomingPayments` | Ausgangszahlungen im Wareneingang | flach | 1 | SwRS-31 |
|
||||
| 34 | SearchArticle | `.../Warehousing/SearchArticle` | Artikelsuche | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 35 | SupplierSearch | `.../Warehousing/SupplierSearch` | Lieferantensuche | flach | 1 (Sammel-Req.) | SwRS-30 |
|
||||
| 36 | AccountSystems | `.../Warehousing/AccountSystems` | Kontenrahmen-Zuordnung Lager | flach | 1 | SwRS-31 |
|
||||
| 37 | ValueAddedTaxView | `.../Warehousing/ValueAddedTaxView.xaml.cs` | USt-Satz-Verwaltung | flach | 1 | SwRS-32 |
|
||||
| 38 | BarcodeToPosition(2) | `backend/Centron.Entities/.../BarcodeToPosition*.cs` | Doppelte Barcode-Positions-Entität (Konsolidierungsfall) | mittel | 1 | SwRS-33 |
|
||||
|
||||
### 1.4 Centron.WPF.UI - Einkauf (`Purchasing`, 105 Dateien) & Vertrieb (`Sales`, 34 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 39 | EDIManagement | `.../Purchasing/EDIManagement` | EDI-Lieferantenbestellabwicklung | flach | 1 | SwRS-34 |
|
||||
| 40 | OrderSuggestionList | `.../Purchasing/OrderSuggestionList` | Bestellvorschlagsliste | flach | 1 | SwRS-35 |
|
||||
| 41 | TravelExpense | `.../Purchasing/TravelExpense` | Reisekostenabrechnung | mittel | 1 (Hypothese) | SwRS-36 |
|
||||
| 42 | PurchaseSettings + Others | `.../Purchasing/{PurchaseSettings,Others}` | Einkaufs-/Belegeinstellungen | flach | 1 | SwRS-37 |
|
||||
| 43 | ProductMatrix | `.../Sales/ProductMatrix` | Variantenkonfiguration | flach | 1 | SwRS-38 |
|
||||
| 44 | SpecialArticleImport / SpecialArticleToContractImport | `.../Sales/SpecialArticle*` | Lieferantenspezifischer Sonderpreisimport | mittel | 1 | SwRS-39 |
|
||||
| 45 | Mailing | `.../Sales/Mailing` | Mailing-Vorlagen Vertrieb | flach | 1 | SwRS-40 |
|
||||
|
||||
### 1.5 Centron.WPF.UI - Helpdesk (254 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 46 | TicketList/TicketDetails | `.../Helpdesk/{TicketList,TicketDetails}` | Ticket-Kernverwaltung inkl. Detailrechte | **tief** | 1 (+Basis StRS-1) | StRS-1, SyRS-1/15, SwRS-41 |
|
||||
| 47 | TicketProcessTemplates | `.../Helpdesk/TicketProcessTemplates` | Bearbeitungsvorlagen | flach | 1 | SwRS-42 |
|
||||
| 48 | ExpectedEvents / ExpectedEventsReporting | `.../Helpdesk/ExpectedEvents*` | SLA-Überwachung erwarteter Ereignisse | mittel | 1 | SwRS-43 |
|
||||
| 49 | CentronChecklist | `.../Helpdesk/CentronChecklist` | Checklistengeführte Bearbeitung | flach | 1 | SwRS-44 |
|
||||
| 50 | TaskManagement (Helpdesk) | `.../Helpdesk/TaskManagement` | Teilaufgabenverwaltung | flach | 1 | SwRS-45 |
|
||||
| 51 | SendSelfCareForm | `.../Helpdesk/SendSelfCareForm` | Kunden-Self-Service-Formular | mittel | 1 | SwRS-46 |
|
||||
| 52 | Dashboard/ConnectionNumber/Events/Settings | `.../Helpdesk/{Dashboard,ConnectionNumber,Events,Settings}` | Helpdesk-Dashboard, Rufnummernzuordnung | flach | 1 | SwRS-47 |
|
||||
|
||||
### 1.6 Centron.WPF.UI - Datenaustausch (`DataExchange`, 178 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 53 | PaymentTransactions | `.../DataExchange/PaymentTransactions` (+ backend `PaymentTransactionBL.cs`) | SEPA-Zahlungsverkehrsexport | **tief** | 1 (5 SEPA-Formatvarianten primär belegt) | StRS-25, SyRS-16, SwRS-48 |
|
||||
| 54 | BookKeeping / DatevOnline2020 | `.../DataExchange/{BookKeeping,DatevOnline2020}` | DATEV-Export | flach | 1 | SwRS-49 |
|
||||
| 55 | DataExport/InvoiceExport | `.../DataExchange/DataExport` | Rechnungsexport | flach | 1 | SwRS-50 |
|
||||
| 56 | DataImport (7 Unterimporte) | `.../DataExchange/DataImport/*` | Stammdatenimporte | flach | 1 (Sammel-Req.) | SwRS-51 |
|
||||
| 57 | DocSync / DocuForm | `.../DataExchange/{DocSync,DocuForm}` | Dokumentensynchronisation/-erzeugung | flach | 1 | SwRS-52 |
|
||||
| 58 | SupplierOrderPerBranch | `.../DataExchange/SupplierOrderPerBranch` | Filialübergreifende Lieferantenbestellung | flach | 1 | SwRS-53 |
|
||||
| 59 | Rmm | `.../DataExchange/Rmm` | Remote-Monitoring-Anbindung | flach | 1 | SwRS-54 |
|
||||
| 60 | Connectors | `.../DataExchange/Connectors` | Generische Konnektoren | flach | 1 | SwRS-55 |
|
||||
|
||||
### 1.7 Centron.WPF.UI - Persönlicher Arbeitsbereich (`MyCentron`, 169 Dateien) & Statistik (`Statistics`, 111 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 61 | MyDay/TodoList/PersonalSettings/Dashboard | `.../MyCentron/{MyDay,TodoList,PersonalSettings,Dashboard}` | Persönlicher Tagesplaner | flach | 1 | SwRS-56 |
|
||||
| 62 | Calendar (MyCentron) | `.../MyCentron/Calendar` | Persönlicher Kalender | flach | 1 | SwRS-57 |
|
||||
| 63 | Telephony | `.../MyCentron/Telephony` | TAPI-Telefonie-Integration | mittel | 1 | SwRS-58 |
|
||||
| 64 | Supremo | `.../MyCentron/Supremo` | Remote-Support-Integration | flach | 1 | SwRS-59 |
|
||||
| 65 | CentronInspectors | `.../MyCentron/CentronInspectors` | Persönliche Datenqualitätsprüfung | mittel | 1 (Hypothese) | SwRS-60 |
|
||||
| 66 | ManagementInfo/Dashboard (Statistics) | `.../Statistics/{ManagementInfo,Dashboard}` | Management-Kennzahlen | flach | 1 | SwRS-61 |
|
||||
| 67 | EmployeeAnalytics | `.../Statistics/EmployeeAnalytics` | Mitarbeiteranalytik | mittel | 1 (Hypothese, arbeitsrechtlich) | SwRS-62 |
|
||||
| 68 | MspCollectors/MspStatistics | `.../Statistics/Msp*` | MSP-Monitoring-Auswertung | flach | 1 | SwRS-63 |
|
||||
| 69 | SaleStatistics | `.../Statistics/SaleStatistics` | Verkaufsstatistik | flach | 1 | SwRS-64 |
|
||||
|
||||
### 1.8 Centron.WPF.UI - Produktion/Projekte/Qualität/Reporting & Nebenprozesse
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 70 | Production | `.../Production` | Maschinen-/Fertigungsauftragsverwaltung | flach | 1 | SwRS-65 |
|
||||
| 71 | PLM | `.../PLM` | Produktlebenszyklus-Übersicht | flach | 1 | SwRS-66 |
|
||||
| 72 | ProjectManagement | `.../ProjectManagement` | Projektplanungsübersicht | flach | 1 | SwRS-67 |
|
||||
| 73 | ProjectPriceImport | `.../ProjectPriceImport` | Projektpreisimport | flach | 1 | SwRS-68 |
|
||||
| 74 | QM | `.../QM` | Qualitätsmanagement-Einstellungen | flach | 1 | SwRS-69 |
|
||||
| 75 | Reports | `.../Reports` | Zentrales Reportmanagement | flach | 1 | SwRS-70 |
|
||||
| 76 | Survey | `.../Survey` | Kundenumfragen | flach | 1 | SwRS-71 |
|
||||
| 77 | Rma | `.../Rma` | Retourenabwicklung (SendBack/SendForth) | mittel | 1 | SwRS-72 |
|
||||
| 78 | Massenupdates | `.../Massenupdates` | Massendatenpflege | mittel | 1 (Hypothese) | SwRS-73 |
|
||||
| 79 | Logistic | `.../Logistic` | Logistik-/Versandarten-Einstellungen | flach | 1 | SwRS-74 |
|
||||
| 80 | PayersAndCostCenter | `.../PayersAndCostCenter` | Kostenstellen-/Zahler-Zuordnung | flach | 1 | SwRS-75 |
|
||||
| 81 | Calendar (Top-Level) | `.../Calendar` | Firmenkalender | flach | 1 | SwRS-76 |
|
||||
| 82 | Dashboard (Top-Level) | `.../Dashboard` | Startdashboard | flach | 1 | SwRS-77 |
|
||||
| 83 | Global | `.../Global` | Querschnittswerkzeuge (10 Bereiche) | flach | 1 (Sammel-Req.) | SwRS-78 |
|
||||
| 84 | Gui | `.../Gui` | Oberflächenprofile | flach | 1 | SwRS-79 |
|
||||
| 85 | ExternalTool | `.../ExternalTool` | Externe Werkzeugintegration | flach | 1 | SwRS-80 |
|
||||
| 86 | TelekomDive | `.../TelekomDive` + `DataExchange/TelekomDive` | Telekom-DIVE-Export | flach | 1 | SwRS-81 |
|
||||
|
||||
### 1.9 Centron.WPF.UI - Sicherheits-/datenschutzkritische Sonderfunktionen
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 87 | ArtificialIntelligence/Chat | `.../ArtificialIntelligence/Chat` | KI-Chat-Assistent mit Rechteprüfung | **tief** | 1 | SwRS-82 |
|
||||
| 88 | ArtificialIntelligence/OpenAIConnect | `.../ArtificialIntelligence/OpenAIConnect` | Externe KI-API-Anbindung | **tief** | 1 (Status HYPOTHESE) | StRS-31, SyRS-22, SwRS-83 |
|
||||
| 89 | ArtificialIntelligence/TextRating+OfferPositionsAIEditor | `.../ArtificialIntelligence/{TextRating,OfferPositionsAIEditor}` | KI-Textbewertung/-Formulierung | flach | 1 | SwRS-84 |
|
||||
| 90 | PasswordManager | `.../PasswordManager` (+ backend AES/AccessLog) | Verschlüsselte Passwortverwaltung | **tief** | 1 (3 Primärbelege) | StRS-32, SyRS-22, SwRS-85 |
|
||||
| 91 | 2FA/TOTP | `shared/Centron.Core/TotpAuth` | Zwei-Faktor-Authentifizierung | **tief** | 1 | SwRS-86 |
|
||||
| 92 | OnlineBanking | `.../OnlineBanking` (+ backend `Finances/OnlineBanking`) | Kontenabgleich | mittel | 1 (Hypothese) | SwRS-87 |
|
||||
|
||||
### 1.10 CentronNexus (Web) & CentronNexus.OutlookAddIn (844 Dateien)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 93 | Configuration | `src/nexus/CentronNexus/Configuration` | Web-Grundkonfiguration | flach | 1 | SwRS-88 |
|
||||
| 94 | Management | `src/nexus/CentronNexus/Management` | Web-Administration (Aufgaben, Ticketmuster, Accounts) | flach | 1 | SwRS-89 |
|
||||
| 95 | Office | `src/nexus/CentronNexus/Office` | Freigegebene Dokumentenansicht | flach | 1 | SwRS-90 |
|
||||
| 96 | ProductionOrderManagement (Nexus) | `src/nexus/CentronNexus/ProductionOrderManagement` | Web-Produktionsauftragsverwaltung | flach | 1 | SwRS-91 |
|
||||
| 97 | ServiceBoard | `src/nexus/CentronNexus/ServiceBoard` | Web-Ticketbearbeitung | mittel | 1 (Konsolidierungsfund) | SwRS-92 |
|
||||
| 98 | Settings/Authentication | `src/nexus/CentronNexus/Settings` | Web-Auth, Branding, Mail-Vorlagen | mittel | 1 (Hypothese) | SwRS-93 |
|
||||
| 99 | WebCart | `src/nexus/CentronNexus/WebCart` | Kundenportal, Formulare, Verträge | flach | 1 | SwRS-94 |
|
||||
| 100 | WebOffer | `src/nexus/CentronNexus/WebOffer` | Web-Angebotsübersicht | mittel | 1 (Primärbeleg WebReceiptState) | SwRS-95 |
|
||||
| 101 | DocumentSigning | `src/nexus/CentronNexus/DocumentSigning` | Elektronische Signatur | **tief** | 1 (rechtliche Hypothese) | SwRS-96 |
|
||||
| 102 | CentronNexus.OutlookAddIn | `src/nexus/CentronNexus.OutlookAddIn` | Outlook-Integration (Belege/CRM/Kunde/Ticket) | flach | 1 | SwRS-97 |
|
||||
|
||||
### 1.11 Backend-Querschnitt, Datenhaltung, externe APIs, Webservice, Shared & Betrieb
|
||||
|
||||
| # | Modul/Komponente | Pfad | Fachliche Aufgabe | Abdeckung | Anzahl | Requirement-IDs |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 103 | IndexSearch | `backend/Centron.BL/IndexSearch` | Deutschsprachige Volltextsuche | mittel | 1 | SwRS-98 |
|
||||
| 104 | RiverDivo | `backend/Centron.BL/RiverDivo` | Partnerintegration RiverSuite | mittel | 1 | SwRS-99 |
|
||||
| 105 | WebSuite | `backend/Centron.BL/WebSuite` | Legacy-Web-Helpdesk (Ablösungskandidat) | mittel | 1 (Hypothese) | SwRS-100 |
|
||||
| 106 | WebVersion | `backend/Centron.BL/WebVersion` | Versionsermittlung | flach | 1 | SwRS-101 |
|
||||
| 107 | TradePool | `backend/Centron.BL/TradePool` | XML-Handelsplattform-Anbindung | flach | 1 | SwRS-102 |
|
||||
| 108 | 11 schlanke BL-Querschnittsdienste | `backend/Centron.BL/{ChangeTracking,Mobile,Telemetry,ObjectExternalReferences,NexusNotifications,ItPlanner,CPra,DocuBoard,Integrations,MailScanner,SocialMedia}` | Diverse technische Unterstützungsdienste | flach | 1 (Sammel-Req., explizit als nicht einzeln vertieft ausgewiesen) | SwRS-103 |
|
||||
| 109 | Centron.Entities | `backend/Centron.Entities` | Zentrales Entitätsmodell | **tief** | 1 (zentral referenziert) | SwRS-104 |
|
||||
| 110 | Centron.DAO | `backend/Centron.DAO` | Generische Datenzugriffsschicht | mittel | 1 | SwRS-105 |
|
||||
| 111 | Centron.Gateway | `backend/Centron.Gateway` | EDI-/Zahlungsverkehrs-Gateway (6 Distributoren, ZUGFeRD, OpenTrans) | **tief** | 1 (8 Primärverzeichnisse belegt) | SwRS-106 |
|
||||
| 112 | Centron.Interfaces | `backend/Centron.Interfaces` | Zentrale Vertrags-/Enum-Schicht | **tief** | 1 (zentral referenziert) | SwRS-107 |
|
||||
| 113 | Centron.Common | `backend/Centron.Common` | Technische Basisdienste inkl. Kryptographie | mittel | 1 | SwRS-108 |
|
||||
| 114 | Centron.APIs.FinAPI | `apis/Centron.APIs.FinAPI` | Bankdatenabruf | mittel | 1 | SwRS-109 |
|
||||
| 115 | Cop/Egis/ITscope/Icecat DataAccess | `apis/Centron.APIs.{CopDataAccess,EgisDataAccess,ITscopeDataAccess,IcecatDataAccess}` | Distributor-Produktdatenanbindung | flach | 1 (Sammel-Req.) | SwRS-110 |
|
||||
| 116 | Centron.Api.EbInterface | `apis/Centron.Api.EbInterface` | E-Invoicing-Standard | mittel | 1 | SwRS-111 |
|
||||
| 117 | Centron.Api.Gls / Shipcloud | `apis/Centron.Api.{Gls,Shipcloud}` | Versanddienstleister-Anbindung | flach | 1 | SwRS-112 |
|
||||
| 118 | Centron.WebServices.Core | `webservice/Centron.WebServices.Core` | Zentrale REST-API-Schicht | **tief** | 1 (2.530 Dateien, zentral) | SwRS-113 |
|
||||
| 119 | Centron.Controllers | `webservice/Centron.Controllers` | HTTP-Controller-Schicht | flach | 1 | SwRS-114 |
|
||||
| 120 | Centron.Host / Host.Console / Host.WindowsService | `webservice/Centron.Host*` | Serverbetriebsarten | flach | 1 | SwRS-115 |
|
||||
| 121 | c-entron.misc.ConnectionManager | `webservice/c-entron.misc.ConnectionManager` | Verbindungsmanagement | flach | 1 | SwRS-116 |
|
||||
| 122 | Centron.Controls / Controls.Preview | `shared/Centron.Controls*` | Gemeinsame UI-Komponentenbibliothek | flach | 1 | SwRS-117 |
|
||||
| 123 | Docker/Compose | `docker/*` | Containerisierte Bereitstellung | mittel | 1 | SwRS-118 |
|
||||
| 124 | CI/CD-Pipelines | `azure-blazor/*.yaml`, `azure/*.yml` | Automatisierter Build/Test/Security-Scan | **tief** | 1 (vollständig gelesen) | SwRS-119 |
|
||||
| 125 | WixSharpInstaller/Deployment | `deployment/*` | Windows-Installer | flach | 1 | SwRS-120 |
|
||||
|
||||
**Summe Inventarzeilen: 125** (davon 1 „nicht analysiert" mit Begründung, 124 mit mindestens einer Anforderung).
|
||||
|
||||
**Abdeckungsverteilung:** tief: 17 Zeilen · mittel: 33 Zeilen · flach: 74 Zeilen · nicht analysiert: 1 Zeile.
|
||||
|
||||
---
|
||||
|
||||
## 2. Konsistenzcheck
|
||||
|
||||
Durchgeführt über den vollständigen Anforderungsbestand (StRS-1 bis StRS-38 ohne StRS-16 [bewusst nicht vergeben, s. u.], SyRS-1 bis SyRS-28, SwRS-1 bis SwRS-120 - **185 Anforderungen gesamt**).
|
||||
|
||||
- **Doppelte/mehrfach vergebene IDs:** Keine gefunden. Jede ID (`StRS-n`, `SyRS-n`, `SwRS-n`) wurde genau einmal vergeben. Anmerkung: Die Nummer `StRS-16` wurde bei der Umstrukturierung des Finanzen-Abschnitts nicht vergeben (Lücke, keine Dopplung) - dies ist kein Konsistenzfehler, da keine ID doppelt existiert, wird aber hier transparent gemacht.
|
||||
- **Anforderungen ohne Beleg:** Keine. Jede der 185 Anforderungen führt mindestens einen Beleg im Feld `Belege`.
|
||||
- **Anforderungen ohne Angabe zur Übernahmewürdigkeit:** Keine. Jede Anforderung trägt eine der vier Kategorien (`übernehmen`, `Workaround`, `Sonderfall`, `veraltet`) mit Begründung.
|
||||
- **Tracelinks auf nicht existierende IDs:** Stichprobenartig und für alle Sammel-Tracelinks („SwRS-X bis SwRS-Y") geprüft - alle referenzierten IDs existieren im jeweiligen Dokument. Keine Abweichung gefunden.
|
||||
- **Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk:** Keine zusätzlichen gefunden über die bereits im Feld `Konsolidierung` vermerkten neun Fälle hinaus (s. Abschnitt 4).
|
||||
- **Risikorelevante Anforderungen:** s. Abschnitt 3.
|
||||
- **Hypothesen.md-Abgleich:** s. Abschnitt 5.
|
||||
|
||||
---
|
||||
|
||||
## 3. Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen)
|
||||
|
||||
| ID | Titel | PRIMÄR-Beleg vorhanden? | HYPOTHESE? |
|
||||
|---|---|---|---|
|
||||
| StRS-1 / SyRS-1 / SwRS-1 | Feingranulare Berechtigungssteuerung | Ja (HelpdeskBL.cs, AppRightLog.cs) | Nein |
|
||||
| SyRS-2 | Einschränkende Rechte als Zusatzfilter | Ja (HelpdeskBL.cs:280-287) | Nein |
|
||||
| StRS-6 / SyRS-6 / SwRS-6/7 | Gestuftes Mahnwesen mit Rechteprüfung | Ja (DunningBL.cs) | Nein |
|
||||
| StRS-7 / SyRS-7 / SwRS-8 | Offene-Posten-Zugriffsschutz | Ja (OposBL.cs:28-35) | Nein |
|
||||
| StRS-10 / SyRS-8 / SwRS-9 | Vier-Augen-Freigabeworkflow Warenkorb | Ja (ReceiptCartState.cs, ReceiptCartBL.cs) | Nein |
|
||||
| StRS-11 / SwRS-10 | Kreditlimitprüfung | Ja (CreditLimitCalculationKind.cs) | Teilweise (Block/Warnung offen) |
|
||||
| StRS-21 / SyRS-13 / SwRS-29 | Verkaufsprovisionsabrechnung | Ja (ReceiptProvisionSchemaBL.cs, 4 Prüfungen) | Nein |
|
||||
| StRS-25 / SyRS-16 / SwRS-48 | SEPA-Zahlungsverkehrsexport | Ja (PaymentTransactionBL.cs:60-64) | Nein |
|
||||
| SwRS-111 | E-Invoicing ebInterface | Ja (eigenständiges Projekt) | Nein |
|
||||
| SwRS-87 | Online-Banking-Kontenabgleich | Nein (nur SEKUNDÄR) | Ja - **als `[HYPOTHESE]`-Detail markiert**, Anforderung selbst `Status: belegt` (Grundfunktion belegt, Sicherheitsprotokoll offen) |
|
||||
| StRS-32 / SyRS-22 / SwRS-85 | Passwortverwaltung (AES + Master-Key + Access-Log) | Ja (AESCryptoLogic.cs, PasswordManagerBL.cs, AccessLogBL.cs) | Nein |
|
||||
| SwRS-86 | Zwei-Faktor-Authentifizierung (TOTP) | Ja (Totp.cs) | Nein |
|
||||
| StRS-31 / SyRS-22 / SwRS-82 | KI-Chat mit Rechteprüfung | Ja (ArtificialIntelligenceTicketToolHandler.cs:45,693) | Nein |
|
||||
| SwRS-83 | Externe KI-API-Anbindung (OpenAI) | Nein (nur SEKUNDÄR) | **Ja - Status: HYPOTHESE** (Kernaussage zur Datenweitergabe unbestätigt) |
|
||||
| SwRS-96 | Elektronische Dokumentensignatur | Ja (IsolatedSignaturePad.razor) | Teilweise (eIDAS-Konformität rechtlich offen) |
|
||||
| SwRS-119 | Automatisierte Security-Pipeline (CodeQL) | Ja (security-pipeline.yaml, vollständig gelesen) | Nein |
|
||||
|
||||
**Ergebnis:** Von 16 risikorelevanten Anforderungen tragen 14 einen vollständigen `PRIMÄR`-Beleg. Zwei Anforderungen (SwRS-87 Online-Banking-Protokoll, SwRS-83 KI-Datenweitergabe) konnten nicht mit einem `PRIMÄR`-Beleg zur *vollen* Aussage abgesichert werden - beide sind gemäß Vorgabe explizit als `[HYPOTHESE]` markiert (SwRS-83 zusätzlich im `Status`-Feld). Kein Verstoß gegen die risikobasierte Priorisierungsregel: Es existiert keine risikorelevante Anforderung ohne `PRIMÄR`-Beleg UND ohne `[HYPOTHESE]`-Kennzeichnung.
|
||||
|
||||
---
|
||||
|
||||
## 4. Konsolidierungskandidaten (Übersicht)
|
||||
|
||||
| Kandidat A | Kandidat B | Fachlicher Gegenstand |
|
||||
|---|---|---|
|
||||
| SwRS-24 (MasterDataLists) | SwRS-25 (AssetBase) | Gerätestammdaten „Stammblatt" vs. „Asset" (im Analyseauftrag als Referenzbeispiel genannt) |
|
||||
| SwRS-14 (ContractEvaluation2) | SwRS-15 (ContractEvaluationOld) | Vertragsauswertung, zwei Implementierungen |
|
||||
| SwRS-12 (DeviceClickCounter) | SwRS-13 (FlatrateBilling) | Zwei Abrechnungsmodelle für dieselbe Gerätekategorie |
|
||||
| SwRS-33 (BarcodeToPosition/2) | - | Zwei Entitäten für denselben Zweck |
|
||||
| SwRS-41 (Ticketbearbeitung Desktop) | SwRS-92 (ServiceBoard Web) | Ticketprozess auf zwei Oberflächen |
|
||||
| SwRS-96 (DocumentSigning Web) | Administration/PdfSigning (Desktop) | Dokumentensignatur auf zwei Kanälen |
|
||||
| SwRS-100 (WebSuite) | Nexus (WebCart/ServiceBoard) | Web-Kundenzugang, alt vs. neu |
|
||||
| SwRS-20 (Campaigns/CopyMailing) | SwRS-40 (Sales/Mailing) | E-Mail-Vorlagenverwaltung an zwei Stellen |
|
||||
| SwRS-76 (Calendar, Top-Level) | SwRS-57 (MyCentron/Calendar) | Firmen- vs. persönlicher Kalender |
|
||||
| SwRS-110 (4 Produktdaten-APIs) | - | Vier gleichartige Produktdatenanbindungen |
|
||||
| SwRS-106 (6 EDI-Gateway-Implementierungen) | - | Sechs distributorspezifische, strukturell ähnliche EDI-Implementierungen |
|
||||
| SwRS-111 (ebInterface) | SwRS-106 (ZUGFeRD) | Zwei E-Invoicing-Standards |
|
||||
| SwRS-91 (Nexus ProductionOrderManagement) | SwRS-65 (Production, Desktop) | Produktionsauftragsverwaltung auf zwei Oberflächen |
|
||||
| SwRS-67 (ProjectManagement) | SwRS-23 (Finances/Projects) | Projektplanung vs. Projektkosten - zu prüfen, ob redundant |
|
||||
| SwRS-66 (PLM) | SwRS-22 (ProductLifecycleManagement), SwRS-27 (AutoEOL) | Lebenszyklus-Funktionen über drei Module verteilt |
|
||||
| SwRS-54 (Rmm) | SwRS-43 (ExpectedEvents), SwRS-63 (MspStatistics) | Kundeninfrastruktur-Monitoring über drei Module verteilt |
|
||||
|
||||
---
|
||||
|
||||
## 5. Abgleich Hypothesen.md gegen Inline-Markierungen
|
||||
|
||||
`Hypothesen.md` listet 15 Zeilen, die 18 Anforderungs-IDs abdecken (mehrere IDs teilen sich dieselbe offene Frage, z. B. StRS-31/SyRS-22/SwRS-83 für die OpenAI-Datenminimierung; SyRS-8/SwRS-10 für die Kreditlimit-Konsequenz). Ein direkter Abgleich mit den Inline-`[HYPOTHESE]`-Markierungen in StRS.md, SyRS.md und SwRS.md (21 Fundstellen, s. u.) bestätigt: **Jede Fundstelle ist einer Zeile in Hypothesen.md zugeordnet, und Hypothesen.md enthält keine zusätzlichen freien Fragen ohne zugehörige Anforderung.** Die Differenz zwischen 21 Fundstellen und 18 IDs erklärt sich durch die genannten Mehrfachverknüpfungen derselben Frage über mehrere Ebenen.
|
||||
|
||||
---
|
||||
|
||||
## 6. Selbstbewertung
|
||||
|
||||
**Tiefe der Analyse je Modul:** Von 125 Inventarzeilen wurden 17 **tief** (mehrere Anforderungen, überwiegend `PRIMÄR`-Belege, mehrfaches Lesen der Implementierung), 33 **mittel** (mindestens ein konkreter, meist `PRIMÄR`er Codebeleg, aber keine erschöpfende Analyse) und 74 **flach** (ausschließlich Verzeichnis-/Klassenstruktur als `SEKUNDÄR`-Beleg, keine Detailanalyse der Implementierung) analysiert. Eine Zeile (Finances/Common) wurde als **nicht analysiert** eingestuft und begründet.
|
||||
|
||||
**Mindestabdeckung erreicht?** Ja - jede der 125 Inventarzeilen bis auf die eine begründete Ausnahme trägt mindestens eine Anforderung (in aller Regel auf SwRS-Ebene, s. Interpretationsentscheidung in Abschnitt 0).
|
||||
|
||||
**Wo war der Beleg dünn?** Die 74 „flach" eingestuften Module sind ausschließlich über Verzeichnis-/Dateinamen belegt (`SEKUNDÄR`). Dies betrifft überwiegend Module mit geringer Dateizahl (<15 Dateien) sowie thematisch periphere Nebenprozesse (z. B. QM/Settings, ProjectManagement, PLM, TelekomDive, Survey). Bei sechs Anforderungen wurde zusätzlich eine `[HYPOTHESE]`-Teilfrage offengehalten, weil eine konkrete Implementierungsdetail-Prüfung (Statuswerte, Auslösekriterien, Protokollierung) den Zeitrahmen dieses Laufs überschritten hätte.
|
||||
|
||||
**Warum wurden Hypothesen geführt?** Bei einer Codebasis dieser Größe (>15.500 Quelldateien über sechs Solution-Bereiche) ist eine erschöpfende Detailanalyse jeder einzelnen Implementierung in einem einzelnen Lauf nicht leistbar. 18 von 185 Anforderungen (9,7 %) tragen eine `[HYPOTHESE]`-Markierung - überwiegend punktuelle Detailfragen zu ansonsten gut belegten Anforderungen, in einem Fall (SwRS-83, externe KI-Datenweitergabe) betrifft die Hypothese die Kernaussage selbst und ist datenschutzrechtlich besonders relevant für eine Zielsystem-Migration.
|
||||
|
||||
**Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?**
|
||||
|
||||
1. **Vertiefung der 84 „flach" eingestuften Module**, insbesondere der neun Konsolidierungskandidaten aus Abschnitt 4, um die tatsächliche fachliche Redundanz (nicht nur strukturelle Ähnlichkeit) zu bestätigen.
|
||||
2. **Klärung der offenen Kreditlimit-Frage** (Hard-Block vs. Soft-Warning) durch Lesen der elf `*SpecificLogic.cs`-Dateien im Detail - dies ist eine risikorelevante, aktuell nur teilweise belegte Aussage.
|
||||
3. **Datenschutzrechtliche Prüfung der OpenAI-Anbindung** (SwRS-83) vor jeder Zielsystem-Entscheidung - aktuell als `HYPOTHESE` geführt, da die tatsächliche Datenübertragung nicht verifiziert werden konnte.
|
||||
4. **Verifikation der WebSuite-Ablösung** (SwRS-100): Ist der Legacy-Web-Helpdesk noch erreichbar, oder kann er im Zielsystem ersatzlos entfallen?
|
||||
5. **Race-Condition-Analyse der Nummernkreisvergabe** (SyRS-3): Die GoBD-relevante Eindeutigkeit von Belegnummern hängt von einer nicht verifizierten Transaktionssemantik ab.
|
||||
6. **Vertragsprüfung/juristische Einordnung der elektronischen Signatur** (SwRS-96) bezüglich eIDAS-Konformität, bevor Nexus-DocumentSigning als alleinige Signaturlösung im Zielsystem übernommen wird.
|
||||
7. **Analyse der Datenbankschicht direkt** (Tabellen, Constraints, Trigger, Indizes) - dieser Lauf hatte keinen Datenbankzugriff und musste sich auf Entity-/DAO-Code stützen; ein SQL-Skript- oder Schema-Export würde die Datenmodell-Anforderungen erheblich vertiefen.
|
||||
8. **Einzelanalyse der elf gebündelten Backend-Querschnittsdienste** (SwRS-103), die aus Zeitgründen nur als Sammelanforderung erfasst wurden.
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
# Glossar
|
||||
|
||||
Domänenbegriffe, wie sie in StRS/SyRS/SwRS verwendet werden. Technische Bezeichner (Klassen, Methoden, Spalten) bleiben in Originalsprache; die Erläuterung ist deutsch.
|
||||
|
||||
| Begriff | Erläuterung |
|
||||
|---|---|
|
||||
| Mandant | Rechtlich/organisatorisch getrennte Betriebseinheit innerhalb einer c-entron-Installation (z. B. eine Niederlassung oder Tochtergesellschaft); Datentrennung über Mandanten-ID (`MandatorManagement`, Entity `Mandator`). |
|
||||
| I3D | Primärschlüsselkonvention der c-entron-Datenbank (Integer-ID-Spalte, in Entities z. B. `User.I3D`, `AppRight.I3D`) - technischer Identifikator eines Datensatzes. |
|
||||
| AppRight | Einzelnes, feingranulares Berechtigungsatom (z. B. `SHOW_HELPDESK`), das einer Benutzergruppe zugewiesen wird und im Code über `UserRightsConst` referenziert wird. |
|
||||
| Restricting Right (einschränkendes Recht) | Sonderfall eines `AppRight`, das ein bereits gewährtes Grundrecht nachträglich einschränkt (z. B. „nur eigene Tickets“ statt „alle Tickets“), s. `CentronRights.md`. |
|
||||
| Filiale/Branch | Organisatorische Untereinheit eines Mandanten (Niederlassung), die für Sichtbarkeits- und Zuweisungsrechte relevant ist. |
|
||||
| Offener Posten (Opos) | Forderung/Verbindlichkeit aus einer Rechnung, die noch nicht (vollständig) ausgeglichen ist. |
|
||||
| Stammblatt | Historisch gewachsene Datenhaltung für Drucker/Kopierer-Stammdaten inkl. Zählerständen, getrennt von der allgemeinen „Asset“-Verwaltung (Konsolidierungsfall, s. Prompt-Beispiel). |
|
||||
| Asset | Allgemeine Geräte-/Hardware-Stammdatenverwaltung (`Warehousing`), fachlich überlappend mit „Stammblatt“. |
|
||||
| Flatrate | Pauschalabrechnungsmodell für wiederkehrende Leistungen (Kopien/Drucke) unabhängig vom tatsächlichen Verbrauch, s. `FlatrateBilling`. |
|
||||
| Klickabrechnung | Nutzungsabhängige Abrechnung von Kopier-/Druckvolumen anhand von Zählerständen, s. `DeviceClickCounter`. |
|
||||
| Dunning (Mahnwesen) | Automatisierter Prozess zur Erinnerung/Mahnung säumiger Zahlungen anhand von Fälligkeits- und Zahlungsstatus. |
|
||||
| SEPA-Mandat | Vom Kunden erteilte Einzugsermächtigung für Lastschriften, verwaltet in `SepaContract`. |
|
||||
| DSGVO-Löschkonzept | Technische Umsetzung von Aufbewahrungs- und Löschfristen für personenbezogene Daten (`Administration/DSGVO`). |
|
||||
| ContractEvaluation | Vertragsauswertung/-abrechnung für laufende Wartungs-/Leasingverträge. |
|
||||
| TimerBilling | Abrechnung erfasster Zeiterfassungsdatensätze (z. B. Helpdesk-Zeiten) gegenüber dem Kunden. |
|
||||
| Nexus | Blazor-basierte Web-/SaaS-Variante von c-entron (`CentronNexus`), ergänzt das WPF-Desktop-Frontend um Web- und Self-Service-Zugänge. |
|
||||
| WebCart | Web-Shop-Komponente für Kunden der Kunden („Sonderpreise“), zugänglich über Web-Accounts. |
|
||||
| EDI | Electronic Data Interchange - automatisierter, strukturierter Belegaustausch mit Lieferanten/Kunden. |
|
||||
| TAPI | Telephony API - Anbindung von Telefonanlagen an c-entron (Anrufsteuerung, Anzeige eingehender Anrufe). |
|
||||
| RiverDivo / RiverSuite | Externes/verwandtes Partnerprodukt-Ökosystem, mit dem c-entron Daten/Rechte austauscht (s. `RiverSuiteRelevantRight`). |
|
||||
| DocuForm | Modul zur Dokumentenerzeugung/-formatierung für Serienbriefe und Ausgabedokumente. |
|
||||
| Commissioning/Kommissionierung | Zusammenstellen bestellter Artikel aus dem Lager zur Auslieferung. |
|
||||
| MSP | Managed Service Provider - Geschäftsmodell, bei dem c-entron IT-Dienstleistungen für Endkunden abrechnet/überwacht (`MspStatistics`, `MspCollectors`). |
|
||||
| ContractEvaluation2 vs. ContractEvaluationOld | Zwei parallel im Code vorhandene Implementierungen der Vertragsauswertung; „Old“ deutet auf eine historisch abgelöste Variante hin (Übernahmewürdigkeit zu prüfen). |
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
# Hypothesen
|
||||
|
||||
Sammlung aller mit `[HYPOTHESE]` markierten Aussagen aus StRS.md, SyRS.md und SwRS.md, jeweils mit der offenen Frage, die zur Bestätigung fehlt. Diese Liste enthält ausschließlich Anforderungen mit Inline-Markierung - keine zusätzlichen freien Fragen ohne zugehörige Anforderung (diese stehen stattdessen in der Selbstbewertung des Analysebericht.md).
|
||||
|
||||
Insgesamt tragen **18 von 185 Anforderungen** (9,7 %) mindestens eine `[HYPOTHESE]`-Markierung. Bei einer Anforderung (SwRS-83) ist die Kernaussage selbst unbestätigt (`Status: HYPOTHESE`); bei den übrigen 17 ist die Anforderung selbst belegt, aber ein Detailaspekt bleibt offen.
|
||||
|
||||
| ID | Titel | Offene Frage |
|
||||
|---|---|---|
|
||||
| SyRS-3 | Kollisionsfreie Nummernkreisvergabe je Mandant/Filiale/Belegart | Erfolgt die Inkrementierung von `NumberGroup.Current` transaktional/gesperrt (Race-Condition-Schutz bei paralleler Belegerzeugung)? Der konkrete DAO-Aufruf mit Transaktions-/Locking-Semantik wurde nicht gelesen. |
|
||||
| SyRS-8 / SwRS-10 | Kreditlimitprüfung mit wählbarer Berechnungsbasis | Blockiert eine Kreditlimitüberschreitung den Beleg zwingend (Hard-Block) oder erzeugt sie nur eine Warnung (Soft-Warning)? Die konkrete Konsequenz wurde in keiner der elf Fundstellen (`*SpecificLogic.cs`) verifiziert. |
|
||||
| SwRS-15 | ContractEvaluationOld als historische Vertragsauswertung | Warum wurde ContractEvaluationOld trotz Existenz von ContractEvaluation2 nicht entfernt (z. B. kundenspezifische Abhängigkeit, fehlende Funktionsparität)? Kein Migrationsvermerk oder Deprecation-Kommentar im Code gefunden. |
|
||||
| SwRS-27 | Automatisierte Artikel-End-of-Life-Kennzeichnung (AutoEOL) | Welches konkrete Kriterium löst die automatische EOL-Kennzeichnung aus (Herstellerabkündigung, Lagerdauer, manueller Trigger)? Nur die Existenz der ViewModel-Klasse wurde geprüft, nicht deren Implementierung. |
|
||||
| SwRS-33 | Zwei parallele Entitäten für Barcode-Positionszuordnung | Werden `BarcodeToPosition` und `BarcodeToPosition2` beide aktiv befüllt, oder ist eine der beiden bereits verwaist? Die schreibenden Aufrufstellen wurden nicht analysiert. |
|
||||
| SwRS-36 | Reisekostenabrechnung mit statusgesteuertem Transaktions-Workflow | Welche konkreten Status durchläuft eine Reisekostenposition, und ist eine Vorgesetzten-Genehmigung zwingend vorgesehen? Nur die Converter-Klassen, nicht das zugrunde liegende Status-Enum wurden gesichtet. |
|
||||
| SwRS-60 | Persönliche Datenprüfung (CentronInspectors) | Welche konkreten Prüfregeln wendet CentronInspectors an? Nur die Modulexistenz wurde geprüft, nicht die Implementierung. |
|
||||
| SwRS-62 | Mitarbeiteranalytik | Stellt die Auswertung eine mitbestimmungspflichtige personenbezogene Leistungskontrolle dar (Betriebsrat-relevant)? Reine Code-Analyse kann diese arbeitsrechtliche Einordnung nicht leisten. |
|
||||
| SwRS-73 | Massenaktualisierung von Datensätzen | Werden Massenänderungen protokolliert (Audit-Trail bei potenziell risikoreichen Bulk-Änderungen)? Die Updates-Implementierung wurde nicht gelesen. |
|
||||
| StRS-31 / SyRS-22 / SwRS-83 | Externe KI-API-Anbindung (OpenAI) ohne erkennbare Datenminimierung | Erfolgt vor dem Versand an OpenAI eine Anonymisierung/Pseudonymisierung personenbezogener oder geschäftskritischer Daten? Nur die View-/ViewModel-Struktur, nicht die tatsächliche Übertragungslogik wurde geprüft - datenschutzrechtlich (DSGVO Art. 44 ff. bei Drittlandtransfer) hochrelevant. Bei SwRS-83 ist dies die Kernaussage der Anforderung selbst (`Status: HYPOTHESE`). |
|
||||
| SwRS-87 | Online-Banking-Kontenabgleich | Welches Sicherheitsprotokoll nutzt die Bankanbindung konkret (z. B. FinTS/HBCI-PIN/TAN), und wie werden Zugangsdaten gespeichert? Nur Konfigurations-/Transaktions-ViewModels, nicht die FinAPI-Implementierung selbst wurden gesichtet. |
|
||||
| SwRS-93 | Web-Authentifizierung, Branding- und Mail-Vorlagen-Einstellungen | Welches Authentifizierungsverfahren nutzt Nexus konkret (eigenes Login vs. OAuth/OIDC)? Nur Existenz und Klassenname `MatchModel` wurden geprüft, nicht die Implementierung von `Authentication.razor`. |
|
||||
| SwRS-96 | Elektronische Dokumentensignatur mit isoliertem Signaturpad | Ist die erfasste Signatur eIDAS-konform (fortgeschrittene/qualifizierte elektronische Signatur) oder eine einfache elektronische Signatur ohne erhöhte Beweiskraft? Juristische Bewertung und Analyse der Signatur-Validierungslogik stehen aus. |
|
||||
| SwRS-100 | Legacy-Web-Helpdesk (WebSuite) als Vorläufer von Nexus | Wird WebSuite noch produktiv von Kunden genutzt, oder ist es bereits vollständig durch Nexus abgelöst? Routing-/Deployment-Konfiguration wurde nicht geprüft. |
|
||||
| SwRS-103 | Weitere technische Querschnittsdienste (11 Bereiche) | Welchen genauen funktionalen Umfang haben ChangeTracking, Mobile, Telemetry, ObjectExternalReferences, NexusNotifications, ItPlanner, CPra, DocuBoard, Integrations, MailScanner und SocialMedia im Einzelnen? Aus Zeitgründen wurde zugunsten der risikorelevanten Module keine Einzelvertiefung vorgenommen (s. Analysebericht, Selbstbewertung). |
|
||||
|
||||
## Zusätzliche offene Punkte ohne eigene Anforderung
|
||||
|
||||
Diese Punkte sind keine `[HYPOTHESE]`-markierten Anforderungsaussagen, sondern generelle methodische Einschränkungen dieses Laufs - sie gehören daher nicht in diese Liste, sondern werden in der Selbstbewertung des `Analysebericht.md` diskutiert:
|
||||
|
||||
- Keine Ausführung/kein Debugging der Anwendung möglich (rein statische Analyse) - Laufzeitverhalten (z. B. tatsächliches Verhalten bei Kreditlimitüberschreitung, s. o.) bleibt an mehreren Stellen unbestätigt.
|
||||
- Keine Datenbankverbindung verfügbar - DB-Constraints (Check-Constraints, Trigger, Fremdschlüssel-Kaskaden) wurden nur so weit erfasst, wie sie sich aus DAO-/Entity-Code erschließen ließen, nicht direkt aus dem Schema.
|
||||
- Keine Interviews mit Fachexperten oder Produktverantwortlichen möglich - mehrere „Warum"-Fragen (z. B. zu WebSuite, ContractEvaluationOld) bleiben rein aus dem Code heraus unbeantwortbar.
|
||||
+766
@@ -0,0 +1,766 @@
|
||||
# Stakeholder Requirements Specification (StRS)
|
||||
|
||||
Fachliche Sicht auf c-entron ERP-Suite: Akteure, Geschäftsziele, Geschäftsprozesse. Format je Anforderung siehe Prompt-Vorgabe. IDs `StRS-<n>`.
|
||||
|
||||
## Legende Akteure
|
||||
`Sachbearbeiter*in` (allgemeiner ERP-Nutzer), `Administrator*in`, `Buchhaltung`, `Lager/Logistik`, `Vertrieb/Innendienst`, `Einkauf`, `Helpdesk-Agent*in`, `Kunde` (Web-Self-Service über Nexus/WebCart), `Mandant/Unternehmensleitung`, `IT-Betrieb`.
|
||||
|
||||
---
|
||||
|
||||
## 1. Administration, Mandantenfähigkeit & Rechteverwaltung
|
||||
|
||||
```
|
||||
ID: StRS-1
|
||||
Titel: Feingranulare Berechtigungssteuerung je Modul und Funktion
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in
|
||||
Vorbedingung: Benutzergruppen und Mitarbeiter sind angelegt.
|
||||
Fakt: `CentronRights.md` dokumentiert pro Fachfunktion ein `UserRightsConst`-Recht (z. B. `SHOW_HELPDESK`, `SHOW_HELPDESK_ONLY_OWN`); `HelpdeskBL.GetShowHelpdeskRight()` (HelpdeskBL.cs:269-290) wertet mehrere Rechte inkl. "einschränkender Rechte" pro Benutzer aus.
|
||||
Aussage: Das System soll es Administrator*innen ermöglichen, für jede Fachfunktion ein eigenständiges, pro Benutzergruppe zuweisbares Recht zu vergeben, das zusätzlich durch einschränkende Rechte (z. B. „nur eigene Datensätze“, „nur eigene Filiale“) verfeinert werden kann.
|
||||
Ergebnis: Ein Benutzer sieht/bearbeitet nur die Funktionen und Datensätze, für die seine Gruppe ein entsprechendes Recht besitzt.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Support/HelpdeskBL.cs (GetShowHelpdeskRight, Z. 269-290) - Begründung: Methode wertet AppRights inkl. einschränkender Rechte serverseitig aus und steuert den Rückgabewert der Sichtbarkeit.
|
||||
- [PRIMÄR] backend/Centron.Entities/Entities/Administration/AppRight.cs, AppGroupRightAssignment.cs - Begründung: Datenmodell für Recht/Gruppen-Zuordnung, durchgesetzte Struktur der Berechtigungsprüfung.
|
||||
- [KONTEXT] CentronRights.md (Abschnitt Helpdesk, Rechte 1-13) - Begründung: Fachliche Dokumentation der Rechtelogik durch die Entwickler selbst, bestätigt Interpretation.
|
||||
Prüfidee: Benutzer ohne SHOW_HELPDESK darf keine Tickets sehen; Benutzer mit SHOW_HELPDESK_ONLY_OWN sieht ausschließlich eigene Tickets (Integrationstest gegen HelpdeskBL).
|
||||
Tracelinks: SyRS-1, SyRS-2, SwRS-1, SwRS-2
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Feingranulare Rechteverwaltung ist Kernanforderung für ein Multi-Mandanten-ERP.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-2
|
||||
Titel: Mandanten- und Filialstruktur mit eigenständigen Nummernkreisen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in, Mandant/Unternehmensleitung
|
||||
Vorbedingung: Mandant und mindestens eine Filiale sind angelegt.
|
||||
Fakt: Entity `Mandator` (Centron.Entities/Entities/Administration/Company/Mandator.cs) und `NumberGroup` (.../NumberGroup.cs) mit Feldern `RangeFrom/RangeTo/Current/Interval` je `MandatorI3D`/`BranchI3D`/`NumberKind` (NumberGroupsViewModel.cs:16-24).
|
||||
Aussage: Das System soll mehrere Mandanten mit jeweils eigenen Filialen abbilden und je Mandant/Filiale und Belegart einen eigenen, lückenlos fortlaufenden Nummernkreis führen.
|
||||
Ergebnis: Belegnummern (z. B. Rechnungsnummern) sind je Mandant/Filiale eindeutig und fortlaufend, wie es GoBD-Anforderungen an Rechnungsnummern entspricht.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Entities/Entities/Administration/Company/NumberGroup.cs - Begründung: Modelliert Nummernkreis mit Start/Ende/Intervall/aktuellem Stand als durchgesetzte Datenstruktur.
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Administration/MandatorManagement/BranchManagement/NumberGroupsViewModel.cs - Begründung: UI-Bindung bestätigt fachliche Verwendung je Mandant/Filiale/Nummernart.
|
||||
Prüfidee: Zwei Filialen desselben Mandanten mit getrennten Nummernkreisen erzeugen keine doppelten Belegnummern (Konsistenztest über NumberGroup.Current).
|
||||
Tracelinks: SyRS-3, SwRS-3
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - gesetzlich motivierte Anforderung an Belegnummerierung bleibt bestehen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-3
|
||||
Titel: Datenschutzkonforme Verwaltung von Auftragsverarbeitungs- und SEPA-Verträgen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in, Kunde
|
||||
Vorbedingung: Kundenstammdaten liegen vor.
|
||||
Fakt: `DsgvoBL` (Administration/Documents/Dsgvo/DsgvoBL.cs) verwaltet `OrderProcessingContractTemplate` und delegiert an `SepaContractOnlinePdfDocumentHandler`/`OrderProcessingContractOnlinePdfDocumentHandler` zur Online-PDF-Erzeugung und -Signatur; `SepaContractWebServiceBL` bietet dedizierte Endpunkte für SEPA-Vertragsvorlagen und -Verträge.
|
||||
Aussage: Das System soll es ermöglichen, Auftragsverarbeitungsverträge (AVV) und SEPA-Lastschriftmandate aus Vorlagen zu erzeugen, dem Kunden zur Online-Unterschrift bereitzustellen und rechtssicher zu archivieren.
|
||||
Ergebnis: Für jeden Kunden liegt ein nachvollziehbar unterschriebenes AVV- bzw. SEPA-Dokument vor.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Administration/Documents/Dsgvo/DsgvoBL.cs (Z. 21-70) - Begründung: Implementiert Anlegen/Ändern/Löschen der Vertragsvorlagen inkl. Prüfung über Guard-Klauseln.
|
||||
- [SEKUNDÄR] backend/Centron.BL/WebServices/Administration/Documents/SepaContracts/SepaContractWebServiceBL.cs - Begründung: Stellt die fachliche Web-Schnittstelle für SEPA-Vertragsverwaltung bereit.
|
||||
Prüfidee: Anlegen einer SEPA-Vertragsvorlage, Zuweisung an Kunde, Erzeugung eines Online-PDF und Abgleich des Signaturstatus.
|
||||
Tracelinks: SyRS-4, SwRS-4
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - gesetzliche DSGVO-/SEPA-Anforderungen bleiben im Zielsystem bestehen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-4
|
||||
Titel: Zentrale Administrationseinstellungen für Betrieb und Fachprozesse
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in, IT-Betrieb
|
||||
Vorbedingung: Installation ist eingerichtet.
|
||||
Fakt: Modulverzeichnis `Modules/Administration` enthält 28 fachlich getrennte Einstellungsbereiche (u. a. `EmployeeManagement`, `MailTemplates`, `PdfSigning`, `ReportServer`, `TaskManagmentSettings`, `TextBlockManagement`, `WebServiceSettings`, `SqlManagers`, `CountryManagement`, `HourlySurchargeRates`).
|
||||
Aussage: Das System soll zentrale, rollenbasiert geschützte Konfigurationsbereiche für Mitarbeiterverwaltung, Kommunikationsvorlagen, Dokumentensignatur, Reportserver-Anbindung, Aufgabenverwaltung, Textbausteine, Web-Service-Zugänge und länderspezifische Stammdaten bereitstellen.
|
||||
Ergebnis: Fachliche und technische Grundeinstellungen sind an einer Stelle zentral pflegbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Administration/* (Verzeichnisstruktur, 28 Unterbereiche) - Begründung: Modulstruktur des UI belegt fachliche Aufteilung der Administrationsfunktionen.
|
||||
Prüfidee: Für jeden Administrationsbereich existiert ein eigenständiger Menüpunkt mit Rechteprüfung.
|
||||
Tracelinks: SyRS-5, SwRS-5
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - zentrale Administration ist Grundvoraussetzung jedes ERP.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 2. Finanzen, Verträge & Abrechnung
|
||||
|
||||
```
|
||||
ID: StRS-5
|
||||
Titel: Automatisierte, wiederkehrende Vertragsabrechnung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung
|
||||
Vorbedingung: Aktive Verträge mit Abrechnungsintervall existieren.
|
||||
Fakt: Wizard-Modul AutomatedBilling (45 Dateien) mit 8 geführten Prozessschritten inkl. Historie (BillingHistoryPageViewModel.cs).
|
||||
Aussage: Das System soll es der Buchhaltung ermöglichen, wiederkehrende Vertragsabrechnungen in einem geführten, nachvollziehbaren Prozess mit Vorschau vor der Ausführung durchzuführen.
|
||||
Ergebnis: Regelmäßige Abrechnungen erfolgen mit reduziertem manuellem Aufwand und dokumentierter Historie.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/AutomatedBilling/* - Begründung: Struktur belegt den vollständigen Wizard-Prozess.
|
||||
Prüfidee: Kompletter Durchlauf des Abrechnungs-Wizards erzeugt die erwartete Anzahl Rechnungen.
|
||||
Tracelinks: SyRS-9, SwRS-11
|
||||
Konsolidierung: Kandidat: ContractEvaluation2/Old (s. SwRS-14/15) - verwandte Vertragsabrechnungs-/Auswertungsfunktion.
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-6
|
||||
Titel: Gestuftes, rechtegeschütztes Mahnwesen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung
|
||||
Vorbedingung: Rechnungen sind überfällig.
|
||||
Fakt: DunningLevel-Statusmaschine (0-3) und serverseitig erzwungene Rechteprüfung (DunningBL.cs).
|
||||
Aussage: Das System soll überfällige Forderungen automatisiert in gestuften Mahnstufen eskalieren und den Mahnprozess auf berechtigte Mitarbeiter*innen beschränken.
|
||||
Ergebnis: Zahlungsausfälle werden frühzeitig durch ein nachvollziehbares Mahnverfahren adressiert.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningBL.cs:1059-1093 - Begründung: Durchsetzende Eskalations- und Rechtelogik.
|
||||
Prüfidee: Mahnlauf erzeugt korrekte Eskalation und ist ohne Recht nicht ausführbar.
|
||||
Tracelinks: SyRS-6, SwRS-6, SwRS-7
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-7
|
||||
Titel: Überwachung offener Posten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung
|
||||
Vorbedingung: Rechnungen mit Zahlungsziel liegen vor.
|
||||
Fakt: OposBL mit dediziertem Rechteschutz (OposBL.cs:28-35).
|
||||
Aussage: Das System soll der Buchhaltung eine geschützte Übersicht offener Forderungen/Verbindlichkeiten bereitstellen.
|
||||
Ergebnis: Liquiditätsrelevante Zahlungsrückstände sind jederzeit einsehbar.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/Invoices/Opos/OposBL.cs:28-35 - Begründung: Durchsetzende Rechteprüfung.
|
||||
Prüfidee: Opos-Liste zeigt alle Rechnungen mit Restbetrag > 0.
|
||||
Tracelinks: SyRS-7, SwRS-8
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-8
|
||||
Titel: Verbrauchsabhängige und pauschale Geräteabrechnung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung, Kunde
|
||||
Vorbedingung: Kopierer/Drucker sind als Stammblatt erfasst.
|
||||
Fakt: DeviceClickCounter (Zählerimport) und FlatrateBilling (Pauschalpositionen) als getrennte Abrechnungsmodelle für dieselbe Gerätekategorie.
|
||||
Aussage: Das System soll Kopierer/Drucker sowohl nutzungsabhängig (Klickabrechnung) als auch pauschal (Flatrate) abrechnen können, je nach Kundenvertrag.
|
||||
Ergebnis: Kunden erhalten das vertraglich vereinbarte Abrechnungsmodell.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/{DeviceClickCounter,FlatrateBilling}/* - Begründung: Strukturelle Evidenz zweier Abrechnungsmodelle.
|
||||
Prüfidee: Gerät mit Flatrate-Vertrag wird nicht zusätzlich klickbasiert abgerechnet.
|
||||
Tracelinks: SyRS-9, SwRS-12, SwRS-13, SwRS-24
|
||||
Konsolidierung: Kandidat: SwRS-12/SwRS-13 - ein Gerät sollte im Zielsystem eindeutig einem Abrechnungsmodell zugeordnet sein.
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-9
|
||||
Titel: Abrechnung erfasster Zeit-/Serviceleistungen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Helpdesk-Agent*in, Buchhaltung
|
||||
Vorbedingung: Zeiterfassungsdatensätze liegen vor (z. B. aus Helpdesk-Tickets).
|
||||
Fakt: TimerBilling-Modul (59 Dateien) mit ArticleWorkItems-Kopplung.
|
||||
Aussage: Das System soll erbrachte, zeiterfasste Serviceleistungen dem Kunden korrekt in Rechnung stellen können.
|
||||
Ergebnis: Serviceleistungen werden abrechnungswirksam ohne manuellen Übertragungsaufwand erfasst.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/TimerBilling/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Helpdesk-Zeiterfassung erscheint korrekt als Rechnungsposition.
|
||||
Tracelinks: SyRS-9, SwRS-16
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-10
|
||||
Titel: Kontrollierter Freigabeprozess für Bestellungen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in, Einkauf
|
||||
Vorbedingung: Warenkorb wurde erstellt.
|
||||
Fakt: ReceiptCartState-Workflow mit dokumentiertem Vier-Augen-Prinzip (Ersteller/Prüfer/Einkäufer).
|
||||
Aussage: Das System soll sicherstellen, dass Bestellungen erst nach Prüfung und Freigabe durch einen Einkäufer wirksam werden.
|
||||
Ergebnis: Unautorisierte oder fehlerhafte Bestellungen werden vor Auslösung abgefangen.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Interfaces/Sales/Receipts/ReceiptCartState.cs:5-41 - Begründung: Durchgesetzter, dokumentierter Freigabe-Workflow.
|
||||
Prüfidee: Warenkorb kann ohne Freigabe nicht in den Zustand "Ordered" wechseln.
|
||||
Tracelinks: SyRS-8, SwRS-9
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-11
|
||||
Titel: Bonitätsprüfung vor Auftragsannahme
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst
|
||||
Vorbedingung: Kunde besitzt ein konfiguriertes Kreditlimit.
|
||||
Fakt: CreditLimitCalculationKind (Brutto/Netto) in mehreren Beleg-Fachlogiken referenziert.
|
||||
Aussage: Das System soll vor Annahme eines Auftrags prüfen, ob das Kreditlimit des Kunden überschritten würde.
|
||||
Ergebnis: Forderungsausfallrisiko wird durch frühzeitige Kreditlimitprüfung reduziert.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Interfaces/Sales/Receipts/CreditLimitCalculationKind.cs - Begründung: Durchgesetzter Werteraum als Berechnungsgrundlage.
|
||||
Prüfidee: Auftrag über dem Kreditlimit löst definiertes Verhalten aus (s. Hypothese SwRS-10).
|
||||
Tracelinks: SyRS-8, SwRS-10
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-12
|
||||
Titel: 360-Grad-Kundenakte
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in, Vertrieb/Innendienst
|
||||
Vorbedingung: Kunde ist angelegt.
|
||||
Fakt: Crm-Modul mit 40 fachlichen Unterbereichen als domänenübergreifende Sicht.
|
||||
Aussage: Das System soll allen Mitarbeitenden eine konsolidierte Sicht auf sämtliche kundenbezogenen Vorgänge bieten, ohne zwischen Fachmodulen wechseln zu müssen.
|
||||
Ergebnis: Schnellerer, informierterer Kundenkontakt.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/Crm/* - Begründung: Strukturelle Evidenz der Aggregation.
|
||||
Prüfidee: Alle kundenbezogenen Vorgänge sind über die Crm-Akte auffindbar.
|
||||
Tracelinks: SyRS-11, SwRS-18
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-13
|
||||
Titel: Filialgenaue Buchhaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung, Mandant/Unternehmensleitung
|
||||
Vorbedingung: Mehrere Filialen sind angelegt.
|
||||
Fakt: BranchBookKeepingNumbers im Modul AccountManagement.
|
||||
Aussage: Das System soll Buchungen je Filiale getrennt auf die jeweils korrekten Konten vornehmen.
|
||||
Ergebnis: Filialbezogene betriebswirtschaftliche Auswertung ist möglich.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/AccountManagement/BranchBookKeepingNumbers/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Buchung in Filiale A erscheint nicht im Kontenrahmen von Filiale B.
|
||||
Tracelinks: SyRS-10, SwRS-19
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-14
|
||||
Titel: Marketingkampagnen mit Wiederverwendung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst
|
||||
Vorbedingung: -
|
||||
Fakt: Campaigns-Modul mit CopyMailing-Funktion.
|
||||
Aussage: Das System soll die Durchführung wiederkehrender Marketingkampagnen durch Wiederverwendung bestehender Kampagnenvorlagen erleichtern.
|
||||
Ergebnis: Reduzierter Aufwand bei Folgekampagnen.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/Campaigns/CopyMailing/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Kopierte Kampagne übernimmt Vorlage und Empfängerliste korrekt.
|
||||
Tracelinks: SyRS-11, SwRS-20
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-15
|
||||
Titel: Vertragsverwaltung mit Mengenkontingenten
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst, Buchhaltung
|
||||
Vorbedingung: -
|
||||
Fakt: Contracts-Modul (120 Dateien) mit Kontingentberechnung (ContractWizard/Contingent).
|
||||
Aussage: Das System soll Verträge mit vereinbarten Mengenkontingenten (z. B. Freidruckvolumen) führen und den Verbrauch automatisch dagegen verrechnen.
|
||||
Ergebnis: Kontingentüber- bzw. -unterschreitung ist jederzeit erkennbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/Contracts/ContractWizard/Contingent/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Verbrauchsbuchung reduziert korrekt das Restkontingent.
|
||||
Tracelinks: SyRS-9, SwRS-21
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-17
|
||||
Titel: Produktlebenszyklus-Transparenz im Verkaufsprozess
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst, Einkauf
|
||||
Vorbedingung: -
|
||||
Fakt: ProductLifecycleManagement-Settings-Modul.
|
||||
Aussage: Das System soll den Lebenszyklusstatus eines Artikels im Verkaufs-/Einkaufsprozess sichtbar machen.
|
||||
Ergebnis: Vermeidung von Bestellungen auslaufender Artikel.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/ProductLifecycleManagement/Settings/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Artikel im Status "abgekündigt" löst Warnhinweis bei Bestellung aus.
|
||||
Tracelinks: SyRS-11, SwRS-22
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-18
|
||||
Titel: Projektbezogene Kostenkontrolle
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst, Buchhaltung
|
||||
Vorbedingung: Projekt ist angelegt.
|
||||
Fakt: Projects-Modul mit explizitem CloseProject-Prozessschritt.
|
||||
Aussage: Das System soll laufende Projektkosten nachverfolgen und ein Projekt nach Abschluss vor weiteren Buchungen schützen.
|
||||
Ergebnis: Projektbudgets sind nachvollziehbar und gegen versehentliche Nachbuchungen geschützt.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/Projects/CloseProject/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Buchung auf abgeschlossenes Projekt wird abgewiesen.
|
||||
Tracelinks: SyRS-9, SwRS-23
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-19
|
||||
Titel: Struktrierter Zahlungsverkehr (Ein- und Ausgang)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung
|
||||
Vorbedingung: -
|
||||
Fakt: Payments-Modul mit getrennten IncomingPayments/OutgoingPayments-Bereichen.
|
||||
Aussage: Das System soll Zahlungsein- und -ausgänge getrennt erfassen und auswerten.
|
||||
Ergebnis: Klare Liquiditätsübersicht nach Zahlungsrichtung.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/Payments/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Zahlungseingang und -ausgang sind in getrennten Listen korrekt auswertbar.
|
||||
Tracelinks: SyRS-10, SwRS-17
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 3. Warenwirtschaft, Einkauf & Vertriebs-Zusatzfunktionen
|
||||
|
||||
```
|
||||
ID: StRS-20
|
||||
Titel: Konsistente Bestandsführung über den gesamten Warenfluss
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lager/Logistik
|
||||
Vorbedingung: -
|
||||
Fakt: Module Inventory, ArticleManagement, Commissioning, AccountSystems, SearchArticle u. a. (426 Dateien im Modul Warehousing).
|
||||
Aussage: Das System soll den gesamten Warenfluss von Wareneingang über Lagerhaltung bis Kommissionierung korrekt und lückenlos abbilden.
|
||||
Ergebnis: Lagerbestände sind jederzeit verlässlich und Grundlage für Verkaufs- und Einkaufsentscheidungen.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Warehousing/* (13 Unterbereiche) - Begründung: Modulstruktur belegt fachliche Breite der Bestandsführung.
|
||||
Prüfidee: Lagerbestand nach vollständigem Warenfluss-Test stimmt mit Sollbestand überein.
|
||||
Tracelinks: SyRS-12, SwRS-25, SwRS-26, SwRS-27, SwRS-28, SwRS-30, SwRS-31, SwRS-32, SwRS-33
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-21
|
||||
Titel: Geschützte Verkaufsprovisionsabrechnung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst, Buchhaltung
|
||||
Vorbedingung: -
|
||||
Fakt: ReceiptProvisionSchemaBL.cs mit mehrfacher Rechteprüfung.
|
||||
Aussage: Das System soll die Berechnung und Auszahlung von Verkaufsprovisionen nur berechtigten Personen zugänglich machen.
|
||||
Ergebnis: Vergütungsrelevante Provisionsdaten sind vor unberechtigtem Zugriff geschützt.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/ReceiptProvisionSchemaBL.cs:258-534 - Begründung: Durchgesetzte Rechteprüfung.
|
||||
Prüfidee: Unberechtigter Zugriff auf Provisionsauswertung wird verweigert.
|
||||
Tracelinks: SyRS-13, SwRS-29
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-22
|
||||
Titel: Effiziente, teilautomatisierte Einkaufsprozesse
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Einkauf
|
||||
Vorbedingung: -
|
||||
Fakt: Module EDIManagement, OrderSuggestionList, TravelExpense, PurchaseSettings (105 Dateien im Modul Purchasing).
|
||||
Aussage: Das System soll den Einkauf durch automatisierte Bestellvorschläge, elektronischen Belegaustausch (EDI) und strukturierte Reisekostenabrechnung unterstützen.
|
||||
Ergebnis: Einkaufsprozesse benötigen weniger manuellen Aufwand und sind auditierbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Purchasing/* - Begründung: Modulstruktur belegt die Fachprozesse.
|
||||
Prüfidee: Bestellvorschlag, EDI-Bestellung und Reisekostenabrechnung je einmal end-to-end durchführen.
|
||||
Tracelinks: SyRS-13, SwRS-34, SwRS-35, SwRS-36, SwRS-37
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-23
|
||||
Titel: Vertriebsunterstützung durch Varianten, Sonderpreise und Mailing
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertrieb/Innendienst
|
||||
Vorbedingung: -
|
||||
Fakt: ProductMatrix, SpecialArticleImport/SpecialArticleToContractImport, Mailing/Templates (34 Dateien im Modul Sales).
|
||||
Aussage: Das System soll den Vertrieb durch Variantenkonfiguration, automatisierten Sonderpreisimport und wiederverwendbare Mailing-Vorlagen entlasten.
|
||||
Ergebnis: Vertriebsprozesse mit hoher Wiederholrate sind effizient durchführbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Sales/* - Begründung: Modulstruktur belegt die Fachfunktionen.
|
||||
Prüfidee: Sonderpreisimport, Variantenauswahl und Mailing-Versand je einmal end-to-end durchführen.
|
||||
Tracelinks: SyRS-14, SwRS-38, SwRS-39, SwRS-40
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 4. Helpdesk, Datenaustausch, persönlicher Arbeitsbereich & Statistik
|
||||
|
||||
```
|
||||
ID: StRS-24
|
||||
Titel: Standardisierter, überwachter Ticketprozess
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Helpdesk-Agent*in, Kunde
|
||||
Vorbedingung: -
|
||||
Fakt: 254 Quelldateien im Modul Helpdesk, 12 fachliche Unterbereiche.
|
||||
Aussage: Das System soll den gesamten Ticketlebenszyklus - von Kundenmeldung über Bearbeitung bis Abschluss - standardisiert, checklisten-/vorlagengestützt und SLA-überwacht abbilden.
|
||||
Ergebnis: Konsistente Servicequalität und frühzeitige Erkennung von SLA-Abweichungen.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Helpdesk/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Ticket von Erfassung bis Abschluss vollständig end-to-end durchführen.
|
||||
Tracelinks: SyRS-15, SwRS-41 bis SwRS-47
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-25
|
||||
Titel: Regulatorik-konformer externer Datenaustausch
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung, IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: 178 Quelldateien im Modul DataExchange, 10 fachliche Unterbereiche inkl. SEPA- und DATEV-Export.
|
||||
Aussage: Das System soll den Datenaustausch mit Banken, Finanzbuchhaltung, Lieferanten und weiteren externen Systemen in den jeweils vorgeschriebenen bzw. etablierten Formaten sicherstellen.
|
||||
Ergebnis: Gesetzliche und branchenübliche Formatanforderungen (SEPA, DATEV) werden erfüllt.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs:60-64 - Begründung: Durchgesetzte SEPA-Formatvielfalt.
|
||||
Prüfidee: SEPA- und DATEV-Export werden gegen ein Referenzformat geprüft.
|
||||
Tracelinks: SyRS-16, SwRS-48 bis SwRS-55
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-26
|
||||
Titel: Integrierter persönlicher Arbeitsplatz
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in
|
||||
Vorbedingung: -
|
||||
Fakt: 169 Quelldateien im Modul MyCentron, 8 fachliche Unterbereiche.
|
||||
Aussage: Das System soll jeder Person einen persönlichen, integrierten Arbeitsbereich (Aufgaben, Kalender, Telefonie, Remote-Support) bieten.
|
||||
Ergebnis: Höhere Produktivität durch reduzierten Werkzeugwechsel.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/MyCentron/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Alle acht Teilbereiche sind für einen Testbenutzer nutzbar.
|
||||
Tracelinks: SyRS-17, SwRS-56 bis SwRS-60
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-27
|
||||
Titel: Betriebswirtschaftliche Transparenz durch integrierte Statistiken
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mandant/Unternehmensleitung
|
||||
Vorbedingung: -
|
||||
Fakt: 111 Quelldateien im Modul Statistics, 6 fachliche Unterbereiche.
|
||||
Aussage: Das System soll der Unternehmensleitung ohne externe BI-Werkzeuge aussagekräftige Kennzahlen zu Management, Mitarbeitenden, MSP-Geschäft und Vertrieb liefern.
|
||||
Ergebnis: Datenbasierte Unternehmenssteuerung ohne Systembrüche.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Statistics/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Kennzahlen aus allen vier Statistikbereichen gegen Rohdaten stichprobenartig verifizieren.
|
||||
Tracelinks: SyRS-18, SwRS-61 bis SwRS-64
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 5. Produktion/Projekte, Retouren/Logistik, Querschnitt & sicherheitskritische Sonderfunktionen
|
||||
|
||||
```
|
||||
ID: StRS-28
|
||||
Titel: Unterstützung von Produktion, Projektplanung und Reporting
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lager/Logistik, Vertrieb/Innendienst
|
||||
Vorbedingung: -
|
||||
Fakt: Module Production, PLM, ProjectManagement, ProjectPriceImport, QM, Reports.
|
||||
Aussage: Das System soll Fertigung, Projektplanung, Preisänderungsanalyse, Qualitätsmanagement und Reportverwaltung als Nebenprozesse zu den Kernfunktionen unterstützen.
|
||||
Ergebnis: Diese Nebenprozesse sind ohne Systemwechsel im ERP verfügbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Production,PLM,ProjectManagement,ProjectPriceImport,QM,Reports}/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Je einen Prozessschritt aus jedem der sechs Module end-to-end durchführen.
|
||||
Tracelinks: SyRS-19, SwRS-65 bis SwRS-70
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-29
|
||||
Titel: Effiziente Nebenprozesse für Retouren, Feedback und Logistik
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lager/Logistik, Administrator*in
|
||||
Vorbedingung: -
|
||||
Fakt: Module Rma, Survey, Massenupdates, Logistic, PayersAndCostCenter.
|
||||
Aussage: Das System soll Retourenabwicklung, Kundenfeedback, Massendatenpflege, Logistikkonfiguration und Kostenstellenzuordnung effizient unterstützen.
|
||||
Ergebnis: Diese Nebenprozesse benötigen keine externen Zusatzwerkzeuge.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Rma,Survey,Massenupdates,Logistic,PayersAndCostCenter}/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Je einen Prozessschritt aus jedem der fünf Module end-to-end durchführen.
|
||||
Tracelinks: SyRS-20, SwRS-71 bis SwRS-75
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-30
|
||||
Titel: Konsistente Querschnittsfunktionen im gesamten System
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in, IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: Module Calendar, Dashboard, Global, Gui, ExternalTool, TelekomDive.
|
||||
Aussage: Das System soll Kalender-, Dashboard-, Diagnose- und Profilfunktionen sowie externe Werkzeugintegration modulübergreifend einheitlich bereitstellen.
|
||||
Ergebnis: Benutzer erleben eine konsistente Grundfunktionalität unabhängig vom Fachmodul.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Calendar,Dashboard,Global,Gui,ExternalTool,TelekomDive}/* - Begründung: Modulstruktur belegt fachliche Breite.
|
||||
Prüfidee: Querschnittsfunktion (z. B. ExceptionMessage) verhält sich in zwei unterschiedlichen Fachmodulen identisch.
|
||||
Tracelinks: SyRS-21, SwRS-76 bis SwRS-81
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-31
|
||||
Titel: Verantwortungsvolle Nutzung von KI-Funktionen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in, Mandant/Unternehmensleitung
|
||||
Vorbedingung: KI-Funktionen sind aktiviert.
|
||||
Fakt: Modul ArtificialIntelligence mit Chat, OpenAIConnect, TextRating, OfferPositionsAIEditor (58 Dateien).
|
||||
Aussage: Das System soll KI-Funktionen (Chat, Textbewertung, Angebotsunterstützung) anbieten, ohne bestehende Berechtigungsgrenzen zu umgehen und mit nachvollziehbarem Umgang mit personenbezogenen/geschäftskritischen Daten gegenüber dem externen KI-Anbieter.
|
||||
Ergebnis: KI-Funktionen steigern die Produktivität, ohne Compliance-Risiken einzugehen.
|
||||
Belege:
|
||||
- [PRIMÄR] centron/Centron.WPF.UI/Modules/ArtificialIntelligence/Chat/Harness/ArtificialIntelligenceTicketToolHandler.cs:45,693 - Begründung: Durchgesetzte Rechteprüfung im KI-Kontext.
|
||||
- [HYPOTHESE] Datenminimierung beim externen KI-Anbieter nicht verifiziert (s. SwRS-83).
|
||||
Prüfidee: KI-Funktion für Benutzer ohne ausreichendes Recht und Netzwerk-Mitschnitt einer KI-Anfrage prüfen.
|
||||
Tracelinks: SyRS-22, SwRS-82, SwRS-83, SwRS-84
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - mit Datenschutzprüfung vor Zielsystem-Übernahme.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-32
|
||||
Titel: Geschützte Verwaltung von Zugangsdaten und Bankverbindungen
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in, Buchhaltung
|
||||
Vorbedingung: -
|
||||
Fakt: AES-Verschlüsselung + Master-Key + Zugriffsprotokoll (PasswordManager), eigenständige TOTP-2FA-Implementierung, Online-Banking-Kontenabgleich über FinAPI.
|
||||
Aussage: Das System soll gespeicherte Zugangsdaten und Bankverbindungsdaten durch Verschlüsselung, Zugriffsprotokollierung und Zwei-Faktor-Authentifizierung besonders schützen.
|
||||
Ergebnis: Kompromittierung eines einzelnen Faktors (z. B. Passwort) führt nicht automatisch zum Datenverlust.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Common/TextCoding/AESCryptoLogic.cs; shared/Centron.Core/TotpAuth/Totp.cs - Begründung: Durchgesetzte kryptographische Schutzmechanismen.
|
||||
Prüfidee: Zugriff auf verschlüsselte Passwörter ohne gültigen 2FA-Code wird verweigert.
|
||||
Tracelinks: SyRS-22, SwRS-85, SwRS-86, SwRS-87
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 6. Nexus-Webplattform, Backend-Infrastruktur & Betrieb
|
||||
|
||||
```
|
||||
ID: StRS-33
|
||||
Titel: Web-/SaaS-fähiger Zugang zu ERP-Kernprozessen (Nexus)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Kunde, Helpdesk-Agent*in, Sachbearbeiter*in
|
||||
Vorbedingung: -
|
||||
Fakt: 844 Quelldateien in CentronNexus + CentronNexus.OutlookAddIn.
|
||||
Aussage: Das System soll zentrale Geschäftsprozesse (Ticketbearbeitung, Kundenportal, Angebote, Dokumentensignatur, Produktionsaufträge) vollständig über eine Weboberfläche zugänglich machen, als Grundlage für die geplante Web-/SaaS-Neuimplementierung.
|
||||
Ergebnis: Mitarbeitende und Kunden benötigen keinen installierten Desktop-Client für Kernprozesse.
|
||||
Belege:
|
||||
- [SEKUNDÄR] src/nexus/CentronNexus/* - Begründung: Modulstruktur belegt fachliche Breite des bereits bestehenden Web-Zugangs.
|
||||
Prüfidee: Kernprozesse (Ticket, Angebot, Signatur) sind vollständig über Nexus durchführbar.
|
||||
Tracelinks: SyRS-23, SwRS-88 bis SwRS-97
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Nexus ist die strategisch wichtigste Referenz für die Zielarchitektur.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-34
|
||||
Titel: Technische Basisdienste und Partnerintegrationen im Hintergrund
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter*in, IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: IndexSearch, RiverDivo, WebSuite, TradePool, WebVersion u. a. im Backend Centron.BL.
|
||||
Aussage: Das System soll technische Basisdienste (Suche, Versionierung) und Partnerintegrationen bereitstellen, die die Kernprozesse unterstützen, ohne selbst im Vordergrund zu stehen.
|
||||
Ergebnis: Kernprozesse profitieren von Suchfunktion, Partnerdatenaustausch und Versionsinformation, ohne dass Anwender die zugrunde liegende Komplexität wahrnehmen.
|
||||
Belege:
|
||||
- [SEKUNDÄR] backend/Centron.BL/{IndexSearch,RiverDivo,WebSuite,TradePool,WebVersion}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Volltextsuche liefert bei einer Stichprobe von zehn Suchbegriffen die erwarteten Treffer.
|
||||
Tracelinks: SyRS-24, SwRS-98 bis SwRS-103
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen (außer WebSuite: veraltet)
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-35
|
||||
Titel: Stabile, wiederverwendbare technische Architekturbasis
|
||||
Ebene: StRS
|
||||
Typ: nicht-funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: Centron.Entities (1.185), Centron.Interfaces (764), Centron.DAO (1.131), Centron.Gateway (105) Dateien.
|
||||
Aussage: Das System soll auf einer stabilen, klar geschichteten technischen Architektur basieren, die neue Fachfunktionen und externe Integrationen ohne grundlegende Umbauten aufnehmen kann.
|
||||
Ergebnis: Weiterentwicklung ist ohne architektonische Brüche möglich.
|
||||
Belege:
|
||||
- [SEKUNDÄR] backend/{Centron.Entities,Centron.Interfaces,Centron.DAO,Centron.Gateway}/* - Begründung: Umfang und Struktur belegen eine etablierte Schichtenarchitektur.
|
||||
Prüfidee: Neue Fachfunktion lässt sich ohne Änderung der Architekturschichten selbst integrieren.
|
||||
Tracelinks: SyRS-25, SwRS-104 bis SwRS-108
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-36
|
||||
Titel: Breite, gekapselte externe Systemanbindung
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung, Einkauf, Lager/Logistik
|
||||
Vorbedingung: -
|
||||
Fakt: 8 eigenständige externe API-Projekte (Banken, Produktdaten, E-Invoicing, Versand).
|
||||
Aussage: Das System soll externe Partner (Banken, Datenpools, Versanddienstleister) über gekapselte, unabhängig wartbare Schnittstellenprojekte anbinden.
|
||||
Ergebnis: Ausfall oder Änderung einer externen Schnittstelle betrifft nicht das Gesamtsystem.
|
||||
Belege:
|
||||
- [SEKUNDÄR] apis/* (8 Projekte) - Begründung: Strukturelle Evidenz der Kapselung.
|
||||
Prüfidee: Simulierter Ausfall einer externen API beeinträchtigt die übrigen Systemfunktionen nicht.
|
||||
Tracelinks: SyRS-26, SwRS-109 bis SwRS-112
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-37
|
||||
Titel: Einheitliche Fachlogik für alle Frontends
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: WebServices.Core (2.530 Dateien) als zentrale, von WPF-Client, Nexus und Outlook-Add-In gemeinsam genutzte Schicht.
|
||||
Aussage: Das System soll Fachlogik einmal zentral implementieren und über alle Frontends (Desktop, Web, Outlook) konsistent bereitstellen.
|
||||
Ergebnis: Keine Doppelimplementierung derselben Geschäftsregel in mehreren Frontends.
|
||||
Belege:
|
||||
- [SEKUNDÄR] webservice/Centron.WebServices.Core/* - Begründung: Umfang belegt die zentrale Rolle.
|
||||
Prüfidee: Identische Geschäftsregel liefert in WPF-Client und Nexus dasselbe Ergebnis.
|
||||
Tracelinks: SyRS-27, SwRS-113 bis SwRS-116
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-38
|
||||
Titel: Automatisierte, sicherheitsgeprüfte Softwarebereitstellung
|
||||
Ebene: StRS
|
||||
Typ: nicht-funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: IT-Betrieb
|
||||
Vorbedingung: -
|
||||
Fakt: Tägliche CodeQL-/Dependency-Scan-Pipeline, Docker-Compose-Umgebungen, WiX-Installer.
|
||||
Aussage: Das System soll neue Versionen automatisiert bauen, testen, auf Sicherheitslücken prüfen und bereitstellen.
|
||||
Ergebnis: Sicherheits- und Qualitätsrisiken werden vor Produktivsetzung erkannt.
|
||||
Belege:
|
||||
- [PRIMÄR] azure-blazor/security-pipeline.yaml - Begründung: Konkrete, tägliche automatisierte Sicherheitsprüfung.
|
||||
Prüfidee: Pipeline-Lauf erkennt eine absichtlich eingefügte bekannte Schwachstelle.
|
||||
Tracelinks: SyRS-28, SwRS-117 bis SwRS-120
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
+2467
File diff suppressed because it is too large
Load Diff
+581
@@ -0,0 +1,581 @@
|
||||
# System Requirements Specification (SyRS)
|
||||
|
||||
Systemverhalten, Schnittstellen, Performance- und Sicherheitsanforderungen. IDs `SyRS-<n>`.
|
||||
|
||||
## 1. Administration, Mandantenfähigkeit & Rechteverwaltung
|
||||
|
||||
```
|
||||
ID: SyRS-1
|
||||
Titel: Serverseitige Durchsetzung von AppRights je Web-Service-Aufruf
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Security)
|
||||
Akteur: System (Webservice-Schicht)
|
||||
Vorbedingung: Benutzer ist authentifiziert, AppRights der Gruppe sind geladen.
|
||||
Fakt: `AppRightsBL.CheckRightsFromUser(userI3D, appRights)` wird in `HelpdeskBL.cs:276` serverseitig aufgerufen, bevor Daten zurückgegeben werden; identische Rechte werden zusätzlich clientseitig in `TicketListViewModel.cs:582` und `ModuleRegistration.cs:508/723` geprüft.
|
||||
Aussage: Das System soll Berechtigungsprüfungen nicht ausschließlich clientseitig (UI-Ausblendung), sondern zusätzlich serverseitig in der Business-Logik-Schicht durchsetzen, sodass ein manipulierter Client keine unberechtigten Daten erhalten kann.
|
||||
Ergebnis: Ein Aufruf ohne ausreichendes Recht liefert serverseitig `ShowHelpdeskRight.None` bzw. eine leere/eingeschränkte Ergebnismenge, unabhängig vom aufrufenden Client.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Support/HelpdeskBL.cs:269-290 - Begründung: Serverseitige BL-Methode, die die durchsetzende Prüfung vornimmt (nicht nur UI).
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Helpdesk/TicketList/TicketListViewModel.cs:582 - Begründung: Zusätzliche clientseitige Spiegelung, kein Ersatz für die serverseitige Prüfung.
|
||||
Prüfidee: Direkter Web-Service-Aufruf ohne SHOW_HELPDESK-Recht (unter Umgehung der UI) liefert keine Ticketdaten.
|
||||
Tracelinks: StRS-1, SwRS-1, SwRS-2
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - serverseitige Durchsetzung ist Sicherheitsgrundprinzip.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-2
|
||||
Titel: Einschränkende Rechte als Zusatzfilter zur Grundberechtigung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (RightsManagement)
|
||||
Vorbedingung: Grundrecht (z. B. SHOW_HELPDESK) ist vergeben.
|
||||
Fakt: `CentronRights.md` Abschnitt 1.1/1.2 beschreibt „restricting rights“ (SHOW_HELPDESK_ONLY_OWN, SHOW_HELPDESK_ONLY_OWN_BRANCH); `HelpdeskBL.cs:280-287` implementiert die Priorisierung dieser Zusatzrechte.
|
||||
Aussage: Das System soll einschränkende Rechte so verarbeiten, dass sie ein bereits gewährtes Grundrecht auf eine Teilmenge der Datensätze (eigene Datensätze bzw. eigene Filiale) begrenzen, nie erweitern.
|
||||
Ergebnis: Datensatzfilterung erfolgt konsistent nach der im Code hinterlegten Prioritätsreihenfolge (Own vor OwnBranch vor All).
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Support/HelpdeskBL.cs:280-287 - Begründung: Enthält die konkrete Prüf-/Prioritätslogik der einschränkenden Rechte.
|
||||
Prüfidee: Benutzer mit SHOW_HELPDESK + SHOW_HELPDESK_ONLY_OWN sieht bei Testdaten mit fremden und eigenen Tickets nur eigene.
|
||||
Tracelinks: StRS-1, SwRS-1
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-3
|
||||
Titel: Kollisionsfreie Nummernkreisvergabe je Mandant/Filiale/Belegart
|
||||
Ebene: SyRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal: Zuverlässigkeit (Reliability)
|
||||
Akteur: System (Belegerzeugung)
|
||||
Vorbedingung: NumberGroup-Konfiguration für Mandant/Filiale/Belegart existiert.
|
||||
Fakt: `NumberGroup`-Entity führt `RangeFrom`, `RangeTo`, `Current`, `Interval` je Kombination aus `MandatorI3D`, `BranchI3D`, `NumberKind` (NumberGroupsViewModel.cs:16-24).
|
||||
Aussage: Das System soll beim Erzeugen eines nummernpflichtigen Belegs den nächsten freien Wert aus dem zugehörigen Nummernkreis atomar reservieren, sodass keine doppelte oder übersprungene Nummer innerhalb desselben Nummernkreises entsteht.
|
||||
Ergebnis: Jede Belegnummer wird höchstens einmal vergeben.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Entities/Entities/Administration/Company/NumberGroup.cs - Begründung: Datenstruktur mit `Current`-Zählerstand als durchgesetzter Zustand der Nummernvergabe.
|
||||
- [HYPOTHESE] Ob die Inkrementierung von `Current` transaktional/gesperrt erfolgt (Race-Condition-Schutz bei parallelen Belegungen), ist aus den gesichteten Dateien nicht ersichtlich - Begründung: Der konkrete DAO-Aufruf mit Transaktions-/Locking-Semantik wurde nicht gelesen.
|
||||
Prüfidee: Parallele Belegerzeugung durch zwei Benutzer im selben Nummernkreis erzeugt keine doppelte Nummer.
|
||||
Tracelinks: StRS-2, SwRS-3
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-4
|
||||
Titel: Online-Signaturworkflow für rechtsverbindliche Dokumente
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (DsgvoBL), Kunde
|
||||
Vorbedingung: Vertragsvorlage ist hinterlegt.
|
||||
Fakt: `DsgvoBL` registriert `IOnlinePdfDocumentHandler`-Implementierungen (`OrderProcessingContractOnlinePdfDocumentHandler`, `SepaContractOnlinePdfDocumentHandler`) für die Online-PDF-Erzeugung (DsgvoBL.cs:25-35).
|
||||
Aussage: Das System soll für unterschiedliche Vertragsarten (AVV, SEPA) über eine gemeinsame Handler-Schnittstelle austauschbare PDF-Erzeugungs- und Signaturprozesse bereitstellen.
|
||||
Ergebnis: Neue Vertragsarten lassen sich durch einen zusätzlichen Handler ergänzen, ohne bestehende Prozesse zu ändern.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Administration/Documents/Dsgvo/DsgvoBL.cs:25-35 - Begründung: Enthält die durchgesetzte Handler-Registrierung als Erweiterungspunkt.
|
||||
Prüfidee: Erzeugen eines SEPA-Online-PDF über SepaContractOnlinePdfDocumentHandler und Abgleich mit erwarteter Vorlage.
|
||||
Tracelinks: StRS-3, SwRS-4
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-5
|
||||
Titel: Modulare, rechtegeschützte Administrationsoberfläche
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator*in
|
||||
Vorbedingung: -
|
||||
Fakt: Verzeichnisstruktur `Modules/Administration` mit 28 eigenständigen Unterbereichen, jeweils mit eigenem `*AppModuleController` (Modul-Registrierungsmuster, s. `ModuleRegistration.cs`).
|
||||
Aussage: Das System soll jeden Administrationsbereich als eigenständiges, über das zentrale Modulregistrierungssystem rechtegeschütztes Modul kapseln.
|
||||
Ergebnis: Ein Administrationsbereich ist unabhängig von anderen aktivierbar/deaktivierbar und rechtebasiert sichtbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/ModuleRegistration.cs - Begründung: Zentrale Registrierungsstelle, die Sichtbarkeit der Module an Rechte koppelt (vgl. Z. 508, 723 für Helpdesk-Beispiel).
|
||||
Prüfidee: Entfernen eines Rechts blendet den zugehörigen Administrationsmenüpunkt aus.
|
||||
Tracelinks: StRS-4, SwRS-5
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 2. Finanzen, Verträge & Abrechnung
|
||||
|
||||
```
|
||||
ID: SyRS-6
|
||||
Titel: Gestuftes Mahnwesen mit serverseitig erzwungener Rechteprüfung
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Security)
|
||||
Akteur: System (DunningBL)
|
||||
Vorbedingung: Rechnung ist fällig überschritten.
|
||||
Fakt: DunningLevel-Enum (None..Level3) und ThrowIfUserHasInsufficentRights() vor jeder Mahnoperation (DunningBL.cs:1059-1093, Aufrufstellen Z. 62,188,347,404; DunningRunBL.cs:53,207).
|
||||
Aussage: Das System soll Mahnläufe nur nach serverseitiger Rechteprüfung zulassen und dabei die Rechnung entsprechend ihrer aktuellen Mahnstufe in die nächsthöhere Stufe überführen.
|
||||
Ergebnis: Mahnstufen-Eskalation ist rechtebasiert geschützt und deterministisch.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningBL.cs:1059-1093 - Begründung: Durchsetzende Prüf- und Eskalationslogik.
|
||||
Prüfidee: Integrationstest: Mahnlauf ohne Recht schlägt fehl; mit Recht wird DunningLevel korrekt erhöht.
|
||||
Tracelinks: StRS-6, SwRS-6, SwRS-7
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-7
|
||||
Titel: Offene-Posten-Zugriffsschutz
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Security)
|
||||
Akteur: System (OposBL)
|
||||
Vorbedingung: -
|
||||
Fakt: OposBL.ThrowIfUserHasInsufficentRights() (OposBL.cs:28-35), aufgerufen aus OposRunBL.cs:65.
|
||||
Aussage: Das System soll den Zugriff auf Offene-Posten-Funktionen serverseitig rechtebasiert absichern.
|
||||
Ergebnis: Unberechtigte Aufrufe der Opos-Funktionen werden serverseitig verhindert.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/Invoices/Opos/OposBL.cs:28-35 - Begründung: Durchsetzende Prüfmethode.
|
||||
Prüfidee: Aufruf von Opos-Funktionen ohne Recht schlägt serverseitig fehl.
|
||||
Tracelinks: StRS-7, SwRS-8
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-8
|
||||
Titel: Vier-Augen-Freigabeworkflow mit Kreditlimitprüfung für Beleg-Erzeugung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (ReceiptCartBL)
|
||||
Vorbedingung: Warenkorb im Zustand ReadyForCheck oder Checked.
|
||||
Fakt: ReceiptCartState-Enum mit dokumentiertem Workflow (ReceiptCartState.cs:5-41); Sperrlogik in ReceiptCartBL.cs:862-865,940; CreditLimitCalculationKind wird an mehreren *SpecificLogic.cs-Klassen referenziert.
|
||||
Aussage: Das System soll Beleg-Erzeugungsprozesse (Warenkorb bis Bestellung) über einen mehrstufigen Freigabeworkflow mit begleitender Kreditlimitprüfung führen.
|
||||
Ergebnis: Kein Beleg entsteht ohne die vorgesehenen Freigabeschritte bzw. ohne erkennbaren Umgang mit Kreditlimitüberschreitung.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/ReceiptCartBL.cs:862-865,940 - Begründung: Durchsetzende Zustandssperre.
|
||||
- [HYPOTHESE] Konkrete Konsequenz einer Kreditlimitüberschreitung (Block vs. Warnung) nicht abschließend verifiziert - Begründung: s. SwRS-10.
|
||||
Prüfidee: Warenkorb-Statuswechsel gegen die im Enum dokumentierte Reihenfolge testen.
|
||||
Tracelinks: StRS-10, StRS-11, SwRS-9, SwRS-10
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-9
|
||||
Titel: Abrechnungsengine für Verträge, Geräte-Zählerstände und Zeiterfassung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (AutomatedBilling, TimerBilling, DeviceClickCounter, FlatrateBilling, ContractEvaluation)
|
||||
Vorbedingung: Abrechnungsrelevante Stammdaten (Vertrag, Zählerstand, Zeiterfassung) liegen vor.
|
||||
Fakt: Wizard-Struktur AutomatedBilling (8 Seiten), Zähler-Import DeviceClickCounter, Positions-Gruppierung FlatrateBilling, parallele ContractEvaluation2/Old, TimerBilling mit ArticleWorkItems, Kontingent-Berechnung in Contracts/ContractWizard/Contingent.
|
||||
Aussage: Das System soll unterschiedliche Abrechnungsmodelle (pauschal, verbrauchsabhängig, zeitbasiert, kontingentbasiert) über spezialisierte, aber im Ergebnis auf denselben Rechnungslauf mündende Teilprozesse unterstützen.
|
||||
Ergebnis: Für jedes Abrechnungsmodell existiert ein reproduzierbarer, historisierter Abrechnungslauf.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/{AutomatedBilling,DeviceClickCounter,FlatrateBilling,TimerBilling,Contracts}/* - Begründung: Strukturelle Evidenz der jeweiligen Fachprozesse.
|
||||
Prüfidee: Für jedes der vier Abrechnungsmodelle einen Testlauf mit erwartetem Rechnungsergebnis durchführen.
|
||||
Tracelinks: StRS-5, StRS-8, StRS-9, StRS-15, SwRS-11, SwRS-12, SwRS-13, SwRS-14, SwRS-15, SwRS-16, SwRS-21, SwRS-24
|
||||
Konsolidierung: Kandidat: die vier Abrechnungsmodelle (Automatisiert/Klick/Flatrate/Zeit) sollten im Zielsystem eine gemeinsame Abrechnungslauf-Infrastruktur mit modellspezifischen Berechnungsstrategien nutzen, statt getrennter Wizard-Implementierungen.
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-10
|
||||
Titel: Filialbezogener Kontenrahmen und gerichteter Zahlungsverkehr
|
||||
Ebene: SyRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (AccountManagement, Payments)
|
||||
Vorbedingung: -
|
||||
Fakt: BranchBookKeepingNumbers (AccountManagement), IncomingPayments/OutgoingPayments (Payments).
|
||||
Aussage: Das System soll Buchhaltungskonten je Filiale trennen und Zahlungsverkehr nach Zahlungsrichtung strukturieren.
|
||||
Ergebnis: Filial- und richtungsgenaue Auswertung des Zahlungsverkehrs ist möglich.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/{AccountManagement,Payments}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Zahlungseingang wird korrekt filial- und kontenzugeordnet gebucht.
|
||||
Tracelinks: StRS-13, StRS-19, SwRS-17, SwRS-19
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-11
|
||||
Titel: Kundenzentrierte Aggregation von CRM, Kampagnen und Produktlebenszyklus
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Crm, Campaigns, ProductLifecycleManagement, Projects)
|
||||
Vorbedingung: -
|
||||
Fakt: Crm-Modul mit 40 Unterbereichen als Aggregationsschicht; Campaigns/CopyMailing; ProductLifecycleManagement/Settings; Projects/CloseProject.
|
||||
Aussage: Das System soll kundenbezogene Informationen aus Vertrieb, Marketing, Produktlebenszyklus und Projekten in konsolidierter Form zugänglich machen.
|
||||
Ergebnis: Konsistente 360-Grad-Sicht auf den Kunden über Modulgrenzen hinweg.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Finances/{Crm,Campaigns,ProductLifecycleManagement,Projects}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Änderung in einem Fachmodul (z. B. neues Ticket) spiegelt sich unmittelbar in der Crm-Akte.
|
||||
Tracelinks: StRS-12, StRS-14, StRS-17, StRS-18, SwRS-18, SwRS-20, SwRS-22, SwRS-23
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 3. Warenwirtschaft/Lager & Einkauf
|
||||
|
||||
```
|
||||
ID: SyRS-12
|
||||
Titel: Durchgängige Bestandsführung von Wareneingang bis Kommissionierung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Warehousing)
|
||||
Vorbedingung: -
|
||||
Fakt: FinalizeInventoryEnum (Teil-/Komplettinventur je Lager), ArticleBookOrBookout/ArticleRebooking (Ein-/Umbuchung), Commissioning (Kommissionierung), AssetBase vs. MasterDataList als getrennte Gerätestammdaten.
|
||||
Aussage: Das System soll den gesamten Warenfluss - Einlagerung, Umbuchung, Inventur, Kommissionierung - konsistent auf denselben Artikel-/Lagerbestandsdaten abbilden.
|
||||
Ergebnis: Der Lagerbestand ist zu jedem Zeitpunkt des Warenflusses korrekt und konsistent.
|
||||
Belege:
|
||||
- [PRIMÄR] centron/Centron.WPF.UI/Modules/Warehousing/Inventory/Enums/FinalizeInventoryEnum.cs - Begründung: Durchgesetzter Werteraum für Inventurumfang.
|
||||
Prüfidee: Ende-zu-Ende-Test: Wareneingang, Einlagerung, Kommissionierung, Inventurabschluss ergeben konsistenten Endbestand.
|
||||
Tracelinks: StRS-20, SwRS-25, SwRS-26, SwRS-27, SwRS-28, SwRS-30, SwRS-33
|
||||
Konsolidierung: Kandidat: AssetBase/MasterDataList (s. SwRS-24/25).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-13
|
||||
Titel: Provisions- und Einkaufsprozess-Steuerung mit Rechteschutz
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Security)
|
||||
Akteur: System (Commissions, Purchasing)
|
||||
Vorbedingung: -
|
||||
Fakt: ReceiptProvisionSchemaBL.cs mit vier eigenständigen Rechteprüfungen (Z. 258,292,379,492/534); EDIManagement, OrderSuggestionList, TravelExpense als eigenständige Einkaufsprozesse.
|
||||
Aussage: Das System soll vergütungsrelevante Funktionen (Provisionsschemas, Reisekosten) serverseitig rechtebasiert schützen und Einkaufsprozesse (EDI, Bestellvorschlag) strukturiert unterstützen.
|
||||
Ergebnis: Vergütungsrelevante Daten sind vor unberechtigtem Zugriff geschützt, Einkaufsprozesse sind durchgängig abgebildet.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/Sales/Receipts/ReceiptProvisionSchemaBL.cs:258-534 - Begründung: Durchgesetzte, mehrfache Rechteprüfung.
|
||||
Prüfidee: Benutzer ohne Provisionsrecht kann kein Schema verwalten/zuordnen/auswerten.
|
||||
Tracelinks: StRS-21, StRS-22, SwRS-29, SwRS-34, SwRS-35, SwRS-36, SwRS-37
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-14
|
||||
Titel: Vertriebsunterstützende Zusatzfunktionen (Varianten, Sonderpreise, Mailing)
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Sales)
|
||||
Vorbedingung: -
|
||||
Fakt: ProductMatrix, WortmannImportViewModel.cs (lieferantenspezifischer Sonderpreisimport), Mailing/Templates.
|
||||
Aussage: Das System soll Vertriebsmitarbeitende durch Variantenkonfiguration, automatisierten Sonderpreisimport und Mailing-Vorlagen unterstützen.
|
||||
Ergebnis: Wiederkehrende Vertriebsaufgaben sind effizient durchführbar.
|
||||
Belege:
|
||||
- [PRIMÄR] centron/Centron.WPF.UI/Modules/Sales/SpecialArticleToContractImport/Settings/WortmannImportViewModel.cs - Begründung: Konkrete, benannte Importlogik.
|
||||
Prüfidee: Sonderpreisimport für Wortmann-Preisliste erzeugt korrekte Vertragskonditionen.
|
||||
Tracelinks: StRS-23, SwRS-38, SwRS-39, SwRS-40
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 4. Helpdesk, Datenaustausch, persönlicher Arbeitsbereich & Statistik
|
||||
|
||||
```
|
||||
ID: SyRS-15
|
||||
Titel: Feingranular rechtegeschützter, vorlagen- und checklistengestützter Ticketprozess
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Helpdesk)
|
||||
Vorbedingung: -
|
||||
Fakt: CentronRights.md Abschnitte 5-9 (7 Detailrechte), TicketProcessTemplates, CentronChecklist, ExpectedEvents/WatchView.
|
||||
Aussage: Das System soll den Ticketlebenszyklus von Erfassung über checklistengeführte Bearbeitung bis Abschluss mit granularer Rechtekontrolle je Detailoperation abbilden und zusätzlich SLA-relevante erwartete Ereignisse überwachen.
|
||||
Ergebnis: Ticketbearbeitung ist standardisiert, auditierbar und proaktiv bei SLA-Abweichungen.
|
||||
Belege:
|
||||
- [PRIMÄR] CentronRights.md, Abschnitte 5-9 - Begründung: Dokumentierte, durchgesetzte Detailrechte.
|
||||
Prüfidee: Vollständiger Ticketdurchlauf inkl. Checkliste, Vorlage und Rechteprüfung je Schritt.
|
||||
Tracelinks: StRS-24, SwRS-41, SwRS-42, SwRS-43, SwRS-44, SwRS-45, SwRS-46, SwRS-47
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-16
|
||||
Titel: Regulatorik-konformer Datenaustausch mit Banken, Finanzbuchhaltung und externen Systemen
|
||||
Ebene: SyRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal: Interoperabilität (Compatibility)
|
||||
Akteur: System (DataExchange)
|
||||
Vorbedingung: -
|
||||
Fakt: PaymentTransactionBL.cs (5 SEPA-PAIN-Formatvarianten), BookKeeping/DatevOnline2020 (DATEV-Export), 7 DataImport-Konnektoren, DocuForm-Authorization.
|
||||
Aussage: Das System soll Zahlungsverkehr, Finanzbuchhaltungsdaten und Stammdaten in den jeweils branchenüblichen, bankaufsichtlich bzw. steuerlich relevanten Formaten austauschen.
|
||||
Ergebnis: Externe Pflichtformate (SEPA, DATEV) werden korrekt bedient.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs:60-64 - Begründung: Durchgesetzte Formatauswahl für SEPA-Export.
|
||||
Prüfidee: SEPA- und DATEV-Export je einmal gegen ein Referenzformat validieren.
|
||||
Tracelinks: StRS-25, SwRS-48, SwRS-49, SwRS-50, SwRS-51, SwRS-52, SwRS-53, SwRS-54, SwRS-55
|
||||
Konsolidierung: Kandidat: SwRS-43/SwRS-54/SwRS-63 (Monitoring-Überschneidung ExpectedEvents/Rmm/MspStatistics).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-17
|
||||
Titel: Integrierter persönlicher Arbeitsbereich mit Kommunikationsanbindung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (MyCentron)
|
||||
Vorbedingung: -
|
||||
Fakt: MyDay/TodoList/PersonalSettings, Calendar, Telephony (TAPI), Supremo, CentronInspectors.
|
||||
Aussage: Das System soll jedem Benutzer einen persönlichen, mit Telefonie und Remote-Support integrierten Arbeitsbereich bereitstellen.
|
||||
Ergebnis: Reduzierter Kontextwechsel zwischen ERP und Kommunikationswerkzeugen.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/MyCentron/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Eingehender Anruf, Termin und Aufgabe erscheinen konsistent im persönlichen Arbeitsbereich.
|
||||
Tracelinks: StRS-26, SwRS-56, SwRS-57, SwRS-58, SwRS-59, SwRS-60
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-18
|
||||
Titel: Mehrdimensionale betriebswirtschaftliche Auswertung
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Statistics)
|
||||
Vorbedingung: -
|
||||
Fakt: ManagementInfo, EmployeeAnalytics, MspCollectors/MspStatistics, SaleStatistics.
|
||||
Aussage: Das System soll betriebswirtschaftliche Kennzahlen nach Management-, Mitarbeiter-, MSP- und Verkaufsperspektive auswertbar machen.
|
||||
Ergebnis: Entscheidungsrelevante Kennzahlen sind ohne externe BI-Werkzeuge verfügbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/Statistics/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Kennzahl aus jeder der vier Perspektiven gegen Rohdaten verifizieren.
|
||||
Tracelinks: StRS-27, SwRS-61, SwRS-62, SwRS-63, SwRS-64
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 5. Produktion/Projekte, Retouren/Logistik, Querschnitt & sicherheitskritische Sonderfunktionen
|
||||
|
||||
```
|
||||
ID: SyRS-19
|
||||
Titel: Produktions-, Projekt- und Reporting-Nebenprozesse
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Production, PLM, ProjectManagement, ProjectPriceImport, QM, Reports)
|
||||
Vorbedingung: -
|
||||
Fakt: MachineManagement/ProductionOrder, schlanke PLM-/ProjectManagement-Views, PriceDifference-Analyse, ReportManagement.
|
||||
Aussage: Das System soll Fertigung, Projektplanung, Preisimport, Qualitätseinstellungen und Reportverwaltung als eigenständige, aber untereinander verknüpfbare Prozesse anbieten.
|
||||
Ergebnis: Diese Nebenprozesse sind nachvollziehbar und konsistent mit den Kernprozessen verknüpft.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Production,PLM,ProjectManagement,ProjectPriceImport,QM,Reports}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Fertigungsauftrag, Projektplanung und Report je einmal end-to-end erzeugen.
|
||||
Tracelinks: StRS-28, SwRS-65 bis SwRS-70
|
||||
Konsolidierung: Kandidat: SwRS-67/SwRS-23 (ProjectManagement vs. Finances/Projects), SwRS-66/SwRS-22/SwRS-27 (PLM-Bündelung).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-20
|
||||
Titel: Retouren-, Umfrage- und Logistik-Nebenprozesse mit Massenpflege
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Rma, Survey, Massenupdates, Logistic, PayersAndCostCenter)
|
||||
Vorbedingung: -
|
||||
Fakt: SendBack/SendForth (Rma), Pages/SurveySettings (Survey), Event/Updates (Massenupdates), ShippingMethodSettings (Logistic).
|
||||
Aussage: Das System soll Retourenabwicklung, Kundenumfragen, Massendatenpflege und Logistikkonfiguration als eigenständige unterstützende Prozesse bereitstellen.
|
||||
Ergebnis: Wiederkehrende Nebenprozesse sind ohne Medienbruch im ERP abgebildet.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Rma,Survey,Massenupdates,Logistic,PayersAndCostCenter}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: RMA-Fall, Umfrage und Massenänderung je einmal end-to-end durchführen.
|
||||
Tracelinks: StRS-29, SwRS-71 bis SwRS-75
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-21
|
||||
Titel: Querschnittsfunktionen für Kalender, Dashboard und Diagnosewerkzeuge
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Calendar, Dashboard, Global, Gui, ExternalTool, TelekomDive)
|
||||
Vorbedingung: -
|
||||
Fakt: Calendar/Settings, Dashboard/Modules, Global (10 Unterbereiche), Gui/Profiles, ExternalTool/Variables, TelekomDive.
|
||||
Aussage: Das System soll modulübergreifende Querschnittsfunktionen (Kalender, Dashboard, Diagnose, Profile, externe Werkzeugintegration, anbieterspezifische Exporte) zentral bereitstellen.
|
||||
Ergebnis: Wiederkehrende technische und organisatorische Hilfsfunktionen sind konsistent nutzbar.
|
||||
Belege:
|
||||
- [SEKUNDÄR] centron/Centron.WPF.UI/Modules/{Calendar,Dashboard,Global,Gui,ExternalTool,TelekomDive}/* - Begründung: Strukturelle Evidenz.
|
||||
Prüfidee: Diagnosewerkzeug, Dashboard-Widget und externe Tool-Integration je einmal end-to-end nutzen.
|
||||
Tracelinks: StRS-30, SwRS-76 bis SwRS-81
|
||||
Konsolidierung: Kandidat: SwRS-76/SwRS-57 (zwei Kalenderimplementierungen).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-22
|
||||
Titel: Sicherheits- und datenschutzkritische Sonderfunktionen (KI, Passwortverwaltung, Online-Banking)
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Security)
|
||||
Akteur: System (ArtificialIntelligence, PasswordManager, OnlineBanking)
|
||||
Vorbedingung: -
|
||||
Fakt: Rechtegeprüfter KI-Ticket-Zugriff (ArtificialIntelligenceTicketToolHandler.cs:45,693), externe OpenAI-Anbindung ohne verifizierte Datenminimierung, AES-Verschlüsselung mit Master-Key und Zugriffsprotokoll im Passwortmanager, eigenständige TOTP-2FA-Implementierung, Online-Banking-Kontenabgleich über FinAPI.
|
||||
Aussage: Das System soll bei allen Funktionen, die besonders sensible Daten verarbeiten oder an Dritte weitergeben (KI-Anbindung, Zugangsdatenverwaltung, Bankdaten), ein durchgängig hohes, technisch durchgesetztes Schutzniveau sicherstellen.
|
||||
Ergebnis: Sensible Daten sind verschlüsselt, zugriffsprotokolliert und nur im Rahmen bestehender Rechte einsehbar; bei der externen KI-Anbindung besteht ein offener Klärungsbedarf zur Datenminimierung.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Common/TextCoding/AESCryptoLogic.cs; shared/Centron.Core/TotpAuth/Totp.cs - Begründung: Durchgesetzte kryptographische Schutzmechanismen.
|
||||
- [HYPOTHESE] Datenminimierung bei OpenAI-Anbindung nicht verifiziert (s. SwRS-83) - Begründung: s. dort.
|
||||
Prüfidee: Je ein Sicherheitstest für Passwortverschlüsselung, 2FA-Login und KI-Datenübertragung durchführen.
|
||||
Tracelinks: StRS-31, StRS-32, SwRS-82 bis SwRS-87
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - im Zielsystem KI-Datenfluss vor Übernahme datenschutzrechtlich prüfen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## 6. Nexus-Webplattform, Backend-Infrastruktur & Betrieb
|
||||
|
||||
```
|
||||
ID: SyRS-23
|
||||
Titel: Vollwertiges Web-Frontend als Alternative zum Desktop-Client
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal: Übertragbarkeit (Portability)
|
||||
Akteur: System (CentronNexus)
|
||||
Vorbedingung: -
|
||||
Fakt: 844 Quelldateien über CentronNexus + CentronNexus.OutlookAddIn, inkl. Service-Board (Ticketbearbeitung), Kundenportal, Web-Angebote, Dokumentensignatur, Produktionsauftragsverwaltung.
|
||||
Aussage: Das System soll über Nexus zentrale ERP-Kernprozesse (Ticketbearbeitung, Kundenportal, Angebotsverwaltung, Dokumentensignatur) vollständig im Web anbieten, als Grundlage für eine SaaS-Neuimplementierung.
|
||||
Ergebnis: Kernprozesse sind orts- und geräteunabhängig ohne Desktop-Client nutzbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/nexus/CentronNexus/DocumentSigning/IsolatedSignaturePad.razor - Begründung: Konkrete, rechtsrelevante Web-Fachfunktion ohne Desktop-Äquivalent.
|
||||
Prüfidee: Zentrale Prozesse (Ticket, Angebot, Signatur) vollständig ohne Desktop-Client durchführbar.
|
||||
Tracelinks: StRS-33, SwRS-88 bis SwRS-97
|
||||
Konsolidierung: Kandidat: SwRS-92/SwRS-41 (Ticketbearbeitung Web vs. Desktop), SwRS-96/PdfSigning (Signatur Web vs. Desktop).
|
||||
Übernahmewürdigkeit: übernehmen - Nexus ist die strategische Basis für die geforderte Web-/SaaS-Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-24
|
||||
Titel: Technische Querschnittsdienste und Partner-/Legacy-Integrationen im Backend
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Centron.BL, Querschnitt)
|
||||
Vorbedingung: -
|
||||
Fakt: IndexSearch (Volltextsuche), RiverDivo (Partnerintegration mit eigenem Rechtemodell), WebSuite (mutmaßlich abgelöster Legacy-Web-Helpdesk), TradePool, WebVersion sowie elf weitere schlanke Querschnittsdienste.
|
||||
Aussage: Das System soll neben den fachlichen Kernmodulen eine Reihe technischer Querschnittsdienste und historisch gewachsener Partner-/Legacy-Integrationen bereitstellen.
|
||||
Ergebnis: Diese Dienste unterstützen die Kernprozesse, tragen aber teilweise (WebSuite) erkennbares Ablösungspotenzial.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Entities/Entities/Administration/RiverSuiteRelevantRight.cs - Begründung: Durchgesetzte Rechteabgrenzung für Partnerintegration.
|
||||
Prüfidee: Erreichbarkeit von WebSuite-Endpunkten im Produktivbetrieb prüfen (Ablösungskandidat).
|
||||
Tracelinks: StRS-34, SwRS-98 bis SwRS-103
|
||||
Konsolidierung: Kandidat: SwRS-100 (WebSuite) vs. Nexus.
|
||||
Übernahmewürdigkeit: übernehmen (mit Ausnahme WebSuite: veraltet)
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-25
|
||||
Titel: Schichtenarchitektur mit zentralem Entitäts-/Interface-Modell und breiter EDI-Gateway-Schicht
|
||||
Ebene: SyRS
|
||||
Typ: Daten
|
||||
Qualitätsmerkmal: Wartbarkeit (Maintainability)
|
||||
Akteur: System (Entities, DAO, Gateway, Interfaces, Common)
|
||||
Vorbedingung: -
|
||||
Fakt: Centron.Entities (1.185 Dateien), Centron.Interfaces (764 Dateien), Centron.DAO (1.131 Dateien), Centron.Gateway (105 Dateien, 6 distributorspezifische EDI-Implementierungen plus ZUGFeRD/OpenTrans), Centron.Common (58 Dateien).
|
||||
Aussage: Das System soll eine konsistente Schichtenarchitektur (Entities - Interfaces - DAO - Gateway - Common) als gemeinsame Basis für alle Frontends (WPF, Nexus, Outlook-Add-In) und alle externen Protokollintegrationen bereitstellen.
|
||||
Ergebnis: Neue Fachfunktionen und Integrationen bauen auf einer stabilen, wiederverwendbaren technischen Basis auf.
|
||||
Belege:
|
||||
- [PRIMÄR] backend/Centron.Gateway/{EDI_Alltron,EDI_Also,EDI_AlsoCH,EDI_EGIS,EDI_Herweck,EDI_Komsa}/* - Begründung: Sechs konkrete, durchgesetzte Protokollimplementierungen belegen die Architekturrolle des Gateway.
|
||||
Prüfidee: Neue Entität durchläuft alle Schichten (Interface-Enum, Entity, DAO, ggf. Gateway) konsistent.
|
||||
Tracelinks: StRS-35, SwRS-104 bis SwRS-108
|
||||
Konsolidierung: Kandidat: sechs EDI_*-Implementierungen könnten vereinheitlicht werden (s. SwRS-106).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-26
|
||||
Titel: Breite externe API-Integration (Banken, Produktdaten, E-Invoicing, Versand)
|
||||
Ebene: SyRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal: Interoperabilität (Compatibility)
|
||||
Akteur: System (apis/*)
|
||||
Vorbedingung: -
|
||||
Fakt: 8 eigenständige API-Projekte: FinAPI (Banken), CopDataAccess/EgisDataAccess/ITscopeDataAccess/IcecatDataAccess (Produktdaten), EbInterface (E-Invoicing), Gls/Shipcloud (Versand).
|
||||
Aussage: Das System soll externe Datenquellen und Dienstleister (Banken, Produktdatenpools, E-Invoicing-Standards, Versanddienstleister) über dedizierte, gekapselte API-Projekte anbinden.
|
||||
Ergebnis: Änderungen an einer externen API betreffen jeweils nur ein gekapseltes Projekt.
|
||||
Belege:
|
||||
- [PRIMÄR] apis/Centron.APIs.FinAPI/*, apis/Centron.Api.EbInterface/* - Begründung: Zwei besonders regulatorisch relevante, eigenständige und durchgesetzte Integrationsprojekte.
|
||||
Prüfidee: Ausfall einer externen API (z. B. FinAPI) beeinträchtigt nicht den Betrieb der übrigen API-Integrationen.
|
||||
Tracelinks: StRS-36, SwRS-109 bis SwRS-112
|
||||
Konsolidierung: Kandidat: vier Produktdatenanbindungen (s. SwRS-110), EbInterface/ZUGFeRD (s. SwRS-111).
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-27
|
||||
Titel: Zentrale, mehrfach nutzbare Web-Service- und Serverbetriebsschicht
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal: Zuverlässigkeit (Reliability)
|
||||
Akteur: System (webservice/*)
|
||||
Vorbedingung: -
|
||||
Fakt: WebServices.Core (2.530 Dateien, größtes Nicht-UI-Projekt), Controllers (57 Dateien), Host/Host.Console/Host.WindowsService (167 Dateien gesamt), ConnectionManager (38 Dateien).
|
||||
Aussage: Das System soll die gesamte Fachlogik über eine einzige, zentrale Web-Service-Schicht kapseln, die von allen Frontends genutzt wird und flexibel als Konsolen- oder Dienstprozess betreibbar ist.
|
||||
Ergebnis: Fachlogik-Änderungen sind an einer Stelle vorzunehmen und wirken für alle Frontends gleichermaßen.
|
||||
Belege:
|
||||
- [PRIMÄR] webservice/Centron.WebServices.Core/* (2.530 Dateien) - Begründung: Umfangreichste, zentrale Nicht-UI-Codebasis.
|
||||
Prüfidee: Fachlogik-Änderung in WebServices.Core wirkt sich konsistent auf WPF-Client, Nexus und Outlook-Add-In aus.
|
||||
Tracelinks: StRS-37, SwRS-113 bis SwRS-116
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-28
|
||||
Titel: Automatisierte, sicherheitsgeprüfte Bereitstellung (Container, CI/CD, Installer)
|
||||
Ebene: SyRS
|
||||
Typ: nicht-funktional
|
||||
Qualitätsmerkmal: Übertragbarkeit (Portability)
|
||||
Akteur: System (Betriebsinfrastruktur)
|
||||
Vorbedingung: -
|
||||
Fakt: Docker-Compose-Umgebungen (docker/compose/compose.yaml), tägliche CodeQL-/Dependency-Scan-Pipeline (security-pipeline.yaml), Playwright-E2E-Tests, WiX-Installer für den Desktop-Client, gemeinsame UI-Komponentenbibliothek (Centron.Controls).
|
||||
Aussage: Das System soll seine Bereitstellung (Container, Installer) und Qualitätssicherung (Build, Unit-/E2E-Tests, statische Sicherheitsanalyse) vollständig automatisiert durchführen.
|
||||
Ergebnis: Neue Versionen sind reproduzierbar, getestet und auf bekannte Sicherheitslücken geprüft auslieferbar.
|
||||
Belege:
|
||||
- [PRIMÄR] azure-blazor/security-pipeline.yaml - Begründung: Konkrete, tägliche automatisierte Sicherheitsprüfung.
|
||||
- [PRIMÄR] docker/compose/compose.yaml - Begründung: Konkrete, durchgesetzte Container-Orchestrierung.
|
||||
Prüfidee: Vollständiger Pipeline-Lauf von Commit bis Testumgebungs-Deployment ohne manuellen Eingriff.
|
||||
Tracelinks: StRS-38, SwRS-117 bis SwRS-120
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Windows-Installer (SwRS-120) im SaaS-Zielsystem voraussichtlich obsolet.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
# Traceability-Tabelle
|
||||
|
||||
Konsolidierte Forward-/Backward-Traceability zwischen StRS, SyRS und SwRS. Eine Zeile je SwRS-Anforderung (Basisebene, vollständige Modulabdeckung); die zugehörige SyRS- und StRS-Ebene sowie ein repräsentativer Artefaktbeleg sind mitgeführt. Enthält eine SwRS-Anforderung mehrere Belege, ist hier nur der stärkste (i. d. R. `PRIMÄR`) Beleg aufgeführt - vollständige Belegliste siehe SwRS.md.
|
||||
|
||||
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg |
|
||||
|---|---|---|---|
|
||||
| StRS-1 | SyRS-1 | SwRS-1 | backend/Centron.Entities/Entities/Administration/AppRightLog.cs |
|
||||
| StRS-1 | SyRS-1 | SwRS-2 | centron/Centron.WPF.UI/Modules/Administration/RightsManagement/RightsTreeViewModel.cs |
|
||||
| StRS-2 | SyRS-3 | SwRS-3 | backend/Centron.Entities/Entities/Administration/Company/NumberGroup.cs |
|
||||
| StRS-3 | SyRS-4 | SwRS-4 | backend/Centron.BL/Administration/Documents/Dsgvo/IOnlinePdfDocumentHandler.cs |
|
||||
| StRS-4 | SyRS-5 | SwRS-5 | centron/Centron.WPF.UI/Modules/ModuleRegistration.cs:508,723 |
|
||||
| StRS-6 | SyRS-6 | SwRS-6 | backend/Centron.Interfaces/Sales/Receipts/Invoices/Dunning/DunningLevel.cs |
|
||||
| StRS-6 | SyRS-6 | SwRS-7 | backend/Centron.BL/Sales/Receipts/Invoices/Dunning/DunningBL.cs:1059-1067 |
|
||||
| StRS-7 | SyRS-7 | SwRS-8 | backend/Centron.BL/Sales/Receipts/Invoices/Opos/OposBL.cs:28-35 |
|
||||
| StRS-10 | SyRS-8 | SwRS-9 | backend/Centron.Interfaces/Sales/Receipts/ReceiptCartState.cs:5-41 |
|
||||
| StRS-11 | SyRS-8 | SwRS-10 | backend/Centron.Interfaces/Sales/Receipts/CreditLimitCalculationKind.cs |
|
||||
| StRS-5 | SyRS-9 | SwRS-11 | centron/Centron.WPF.UI/Modules/Finances/AutomatedBilling/Pages/*.cs |
|
||||
| StRS-8 | SyRS-9 | SwRS-12 | centron/Centron.WPF.UI/Modules/Finances/DeviceClickCounter/DocuFormApiImport/*.cs |
|
||||
| StRS-8 | SyRS-9 | SwRS-13 | centron/Centron.WPF.UI/Modules/Finances/FlatrateBilling/AssetPositions/*.cs |
|
||||
| StRS-5 | SyRS-9 | SwRS-14 | centron/Centron.WPF.UI/Modules/Finances/ContractEvaluation2/*.cs |
|
||||
| StRS-5 | SyRS-9 | SwRS-15 | centron/Centron.WPF.UI/Modules/Finances/ContractEvaluationOld/*.cs |
|
||||
| StRS-9 | SyRS-9 | SwRS-16 | centron/Centron.WPF.UI/Modules/Finances/TimerBilling/Settings/ArticleWorkItems/*.cs |
|
||||
| StRS-19 | SyRS-10 | SwRS-17 | centron/Centron.WPF.UI/Modules/Finances/Payments/*.cs |
|
||||
| StRS-12 | SyRS-11 | SwRS-18 | centron/Centron.WPF.UI/Modules/Finances/Crm/* |
|
||||
| StRS-13 | SyRS-10 | SwRS-19 | centron/Centron.WPF.UI/Modules/Finances/AccountManagement/BranchBookKeepingNumbers/*.cs |
|
||||
| StRS-14 | SyRS-11 | SwRS-20 | centron/Centron.WPF.UI/Modules/Finances/Campaigns/CopyMailing/*.cs |
|
||||
| StRS-15 | SyRS-9 | SwRS-21 | backend/Centron.Interfaces/Sales/Receipts/ContractLists/ContractDurationKind.cs |
|
||||
| StRS-17 | SyRS-11 | SwRS-22 | centron/Centron.WPF.UI/Modules/Finances/ProductLifecycleManagement/Settings/*.cs |
|
||||
| StRS-18 | SyRS-9 | SwRS-23 | centron/Centron.WPF.UI/Modules/Finances/Projects/CloseProject/*.cs |
|
||||
| StRS-8 | SyRS-9 | SwRS-24 | centron/Centron.WPF.UI/Modules/Finances/MasterDataLists/ChangeMainDeviceSerialNumberViewModel.cs |
|
||||
| StRS-8 | SyRS-12 | SwRS-25 | backend/Centron.Entities/Entities/Sales/CustomerAssets/AssetBase.cs |
|
||||
| StRS-20 | SyRS-12 | SwRS-26 | centron/Centron.WPF.UI/Modules/Warehousing/Inventory/Enums/FinalizeInventoryEnum.cs |
|
||||
| StRS-17 | SyRS-12 | SwRS-27 | centron/Centron.WPF.UI/Modules/Warehousing/ArticleManagement/AutoEOL/AutoEOLViewModel.cs |
|
||||
| StRS-20 | SyRS-12 | SwRS-28 | centron/Centron.WPF.UI/Modules/Warehousing/Commissioning/*.cs |
|
||||
| StRS-21 | SyRS-13 | SwRS-29 | backend/Centron.BL/Sales/Receipts/ReceiptProvisionSchemaBL.cs:258-534 |
|
||||
| StRS-20 | SyRS-12 | SwRS-30 | centron/Centron.WPF.UI/Modules/Warehousing/{ArticleImport,ArticleUnitManagement,MaterialGroupManagement,BarcodeManagement,SearchArticle,SupplierSearch}/* |
|
||||
| StRS-19 | SyRS-10 | SwRS-31 | centron/Centron.WPF.UI/Modules/Warehousing/{AccountSystems,OutcomingPayments}/*.cs |
|
||||
| StRS-19 | SyRS-10 | SwRS-32 | centron/Centron.WPF.UI/Modules/Warehousing/ValueAddedTaxView.xaml.cs |
|
||||
| StRS-20 | SyRS-12 | SwRS-33 | backend/Centron.Entities/Entities/Sales/CustomerAssets/BarcodeToPosition.cs, BarcodeToPosition2.cs |
|
||||
| StRS-22 | SyRS-13 | SwRS-34 | centron/Centron.WPF.UI/Modules/Purchasing/EDIManagement/EDIReceiptTabs/*.cs |
|
||||
| StRS-22 | SyRS-13 | SwRS-35 | centron/Centron.WPF.UI/Modules/Purchasing/OrderSuggestionList/Module/*.cs |
|
||||
| StRS-22 | SyRS-13 | SwRS-36 | centron/Centron.WPF.UI/Modules/Purchasing/TravelExpense/Converters/TransactionDetailStatusTo*.cs |
|
||||
| StRS-22 | SyRS-13 | SwRS-37 | centron/Centron.WPF.UI/Modules/Purchasing/PurchaseSettings/ReceiptSettings/*.cs |
|
||||
| StRS-23 | SyRS-14 | SwRS-38 | centron/Centron.WPF.UI/Modules/Sales/ProductMatrix/*.cs |
|
||||
| StRS-23 | SyRS-14 | SwRS-39 | centron/Centron.WPF.UI/Modules/Sales/SpecialArticleToContractImport/Settings/WortmannImportViewModel.cs |
|
||||
| StRS-23 | SyRS-14 | SwRS-40 | centron/Centron.WPF.UI/Modules/Sales/Mailing/Templates/MailingTemplatesViewModel.cs |
|
||||
| StRS-1 | SyRS-15 | SwRS-41 | CentronRights.md, Abschnitte 5-9 |
|
||||
| StRS-24 | SyRS-15 | SwRS-42 | centron/Centron.WPF.UI/Modules/Helpdesk/TicketProcessTemplates/*.cs |
|
||||
| StRS-24 | SyRS-15 | SwRS-43 | centron/Centron.WPF.UI/Modules/Helpdesk/ExpectedEvents/ViewModels/Details/*.cs |
|
||||
| StRS-24 | SyRS-15 | SwRS-44 | centron/Centron.WPF.UI/Modules/Helpdesk/CentronChecklist/*.cs |
|
||||
| StRS-24 | SyRS-15 | SwRS-45 | centron/Centron.WPF.UI/Modules/Helpdesk/TaskManagement/*.cs |
|
||||
| StRS-24 | SyRS-15 | SwRS-46 | centron/Centron.WPF.UI/Modules/Helpdesk/SendSelfCareForm/*.cs |
|
||||
| StRS-24 | SyRS-15 | SwRS-47 | centron/Centron.WPF.UI/Modules/Helpdesk/{Dashboard,ConnectionNumber}/*.cs |
|
||||
| StRS-25 | SyRS-16 | SwRS-48 | backend/Centron.BL/DataExchange/PaymentTransactions/PaymentTransactionBL.cs:60-64,258,327 |
|
||||
| StRS-25 | SyRS-16 | SwRS-49 | centron/Centron.WPF.UI/Modules/DataExchange/{BookKeeping,DatevOnline2020}/* |
|
||||
| StRS-25 | SyRS-16 | SwRS-50 | centron/Centron.WPF.UI/Modules/DataExchange/DataExport/InvoiceExport/*.cs |
|
||||
| StRS-25 | SyRS-16 | SwRS-51 | centron/Centron.WPF.UI/Modules/DataExchange/DataImport/* |
|
||||
| StRS-25 | SyRS-16 | SwRS-52 | centron/Centron.WPF.UI/Modules/DataExchange/DocuForm/Authorization/*.cs |
|
||||
| StRS-25 | SyRS-16 | SwRS-53 | centron/Centron.WPF.UI/Modules/DataExchange/SupplierOrderPerBranch/*.cs |
|
||||
| StRS-25 | SyRS-16 | SwRS-54 | centron/Centron.WPF.UI/Modules/DataExchange/Rmm/*.cs |
|
||||
| StRS-25 | SyRS-16 | SwRS-55 | centron/Centron.WPF.UI/Modules/DataExchange/Connectors/Settings/*.cs |
|
||||
| StRS-26 | SyRS-17 | SwRS-56 | centron/Centron.WPF.UI/Modules/MyCentron/{MyDay,TodoList,PersonalSettings}/* |
|
||||
| StRS-26 | SyRS-17 | SwRS-57 | centron/Centron.WPF.UI/Modules/MyCentron/Calendar/*.cs |
|
||||
| StRS-26 | SyRS-17 | SwRS-58 | centron/Centron.WPF.UI/Modules/MyCentron/Telephony/*.cs |
|
||||
| StRS-26 | SyRS-17 | SwRS-59 | centron/Centron.WPF.UI/Modules/MyCentron/Supremo/*.cs |
|
||||
| StRS-26 | SyRS-17 | SwRS-60 | centron/Centron.WPF.UI/Modules/MyCentron/CentronInspectors/*.cs |
|
||||
| StRS-27 | SyRS-18 | SwRS-61 | centron/Centron.WPF.UI/Modules/Statistics/{ManagementInfo,Dashboard}/*.cs |
|
||||
| StRS-27 | SyRS-18 | SwRS-62 | centron/Centron.WPF.UI/Modules/Statistics/EmployeeAnalytics/*.cs |
|
||||
| StRS-27 | SyRS-18 | SwRS-63 | centron/Centron.WPF.UI/Modules/Statistics/{MspCollectors,MspStatistics}/*.cs |
|
||||
| StRS-27 | SyRS-18 | SwRS-64 | centron/Centron.WPF.UI/Modules/Statistics/SaleStatistics/*.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-65 | centron/Centron.WPF.UI/Modules/Production/{MachineManagement,ProductionOrder}/*.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-66 | centron/Centron.WPF.UI/Modules/PLM/PlmView.xaml.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-67 | centron/Centron.WPF.UI/Modules/ProjectManagement/ProjectManagementView.xaml.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-68 | centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference/*.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-69 | centron/Centron.WPF.UI/Modules/QM/Settings/*.cs |
|
||||
| StRS-28 | SyRS-19 | SwRS-70 | centron/Centron.WPF.UI/Modules/Reports/ReportManagement/*.cs |
|
||||
| StRS-29 | SyRS-20 | SwRS-71 | centron/Centron.WPF.UI/Modules/Survey/Pages/*.cs |
|
||||
| StRS-29 | SyRS-20 | SwRS-72 | centron/Centron.WPF.UI/Modules/Rma/{SendBack,SendForth}/*.cs |
|
||||
| StRS-29 | SyRS-20 | SwRS-73 | centron/Centron.WPF.UI/Modules/Massenupdates/{Event,Updates}/*.cs |
|
||||
| StRS-29 | SyRS-20 | SwRS-74 | centron/Centron.WPF.UI/Modules/Logistic/ShippingMethodSettings/*.cs |
|
||||
| StRS-29 | SyRS-20 | SwRS-75 | centron/Centron.WPF.UI/Modules/PayersAndCostCenter/*.cs |
|
||||
| StRS-30 | SyRS-21 | SwRS-76 | centron/Centron.WPF.UI/Modules/Calendar/Settings/*.cs |
|
||||
| StRS-30 | SyRS-21 | SwRS-77 | centron/Centron.WPF.UI/Modules/Dashboard/Modules/*.cs |
|
||||
| StRS-30 | SyRS-21 | SwRS-78 | centron/Centron.WPF.UI/Modules/Global/* |
|
||||
| StRS-30 | SyRS-21 | SwRS-79 | centron/Centron.WPF.UI/Modules/Gui/Profiles/*.cs |
|
||||
| StRS-30 | SyRS-21 | SwRS-80 | centron/Centron.WPF.UI/Modules/ExternalTool/Variables/*.cs |
|
||||
| StRS-30 | SyRS-21 | SwRS-81 | centron/Centron.WPF.UI/Modules/TelekomDive/*.cs |
|
||||
| StRS-31 | SyRS-22 | SwRS-82 | centron/Centron.WPF.UI/Modules/ArtificialIntelligence/Chat/Harness/ArtificialIntelligenceTicketToolHandler.cs:45,693 |
|
||||
| StRS-31 | SyRS-22 | SwRS-83 | centron/Centron.WPF.UI/Modules/ArtificialIntelligence/OpenAIConnect/Views/AiApiReceiptView.xaml.cs |
|
||||
| StRS-31 | SyRS-22 | SwRS-84 | centron/Centron.WPF.UI/Modules/ArtificialIntelligence/{TextRating,OfferPositionsAIEditor}/*.cs |
|
||||
| StRS-32 | SyRS-22 | SwRS-85 | backend/Centron.Common/TextCoding/AESCryptoLogic.cs |
|
||||
| StRS-32 | SyRS-22 | SwRS-86 | shared/Centron.Core/TotpAuth/Totp.cs, VerificationWindow.cs |
|
||||
| StRS-32 | SyRS-22 | SwRS-87 | centron/Centron.WPF.UI/Modules/OnlineBanking/*.cs |
|
||||
| StRS-33 | SyRS-23 | SwRS-88 | src/nexus/CentronNexus/Configuration/*.cs |
|
||||
| StRS-33 | SyRS-23 | SwRS-89 | src/nexus/CentronNexus/Management/*.razor |
|
||||
| StRS-33 | SyRS-23 | SwRS-90 | src/nexus/CentronNexus/Office/SharedDocument*.razor |
|
||||
| StRS-33 | SyRS-23 | SwRS-91 | src/nexus/CentronNexus/ProductionOrderManagement/*.cs |
|
||||
| StRS-33 | SyRS-23 | SwRS-92 | src/nexus/CentronNexus/ServiceBoard/*.razor |
|
||||
| StRS-33 | SyRS-23 | SwRS-93 | src/nexus/CentronNexus/Settings/Authentication/*.razor,*.cs |
|
||||
| StRS-33 | SyRS-23 | SwRS-94 | src/nexus/CentronNexus/WebCart/CustomerPortal*.razor |
|
||||
| StRS-33 | SyRS-23 | SwRS-95 | backend/Centron.Interfaces/Sales/Receipts/WebReceipt/WebReceiptState.cs |
|
||||
| StRS-33 | SyRS-23 | SwRS-96 | src/nexus/CentronNexus/DocumentSigning/IsolatedSignaturePad.razor |
|
||||
| StRS-33 | SyRS-23 | SwRS-97 | src/nexus/CentronNexus.OutlookAddIn/{Belege,CRM,Customer,Document,Ticket}/* |
|
||||
| StRS-34 | SyRS-24 | SwRS-98 | backend/Centron.BL/IndexSearch/GermanAnalyzer.cs, IndexBuilder.cs |
|
||||
| StRS-34 | SyRS-24 | SwRS-99 | backend/Centron.Entities/Entities/Administration/RiverSuiteRelevantRight.cs |
|
||||
| StRS-34 | SyRS-24 | SwRS-100 | backend/Centron.BL/WebSuite/WebHDQuestionBL.cs |
|
||||
| StRS-34 | SyRS-24 | SwRS-101 | backend/Centron.BL/WebVersion/VersionBL.cs |
|
||||
| StRS-34 | SyRS-24 | SwRS-102 | backend/Centron.BL/TradePool/TradePoolXmlLogic.cs |
|
||||
| StRS-34 | SyRS-24 | SwRS-103 | backend/Centron.BL/{ChangeTracking,Mobile,Telemetry,ObjectExternalReferences,NexusNotifications,ItPlanner,CPra,DocuBoard,Integrations,MailScanner,SocialMedia}/*.cs |
|
||||
| StRS-35 | SyRS-25 | SwRS-104 | backend/Centron.Entities/* |
|
||||
| StRS-35 | SyRS-25 | SwRS-105 | backend/Centron.DAO/{AdoNETDataAccess,Mappings,CustomDAOs}/* |
|
||||
| StRS-35 | SyRS-25 | SwRS-106 | backend/Centron.Gateway/{EDI_Alltron,EDI_Also,EDI_AlsoCH,EDI_EGIS,EDI_Herweck,EDI_Komsa,OpenTrans,ZUGFeRD21_Extended}/* |
|
||||
| StRS-35 | SyRS-25 | SwRS-107 | backend/Centron.Interfaces/* |
|
||||
| StRS-35 | SyRS-25 | SwRS-108 | backend/Centron.Common/TextCoding/AESCryptoLogic.cs |
|
||||
| StRS-36 | SyRS-26 | SwRS-109 | apis/Centron.APIs.FinAPI/* |
|
||||
| StRS-36 | SyRS-26 | SwRS-110 | apis/Centron.APIs.{CopDataAccess,EgisDataAccess,ITscopeDataAccess,IcecatDataAccess}/* |
|
||||
| StRS-36 | SyRS-26 | SwRS-111 | apis/Centron.Api.EbInterface/* |
|
||||
| StRS-36 | SyRS-26 | SwRS-112 | apis/Centron.Api.{Gls,Shipcloud}/* |
|
||||
| StRS-37 | SyRS-27 | SwRS-113 | webservice/Centron.WebServices.Core/* |
|
||||
| StRS-37 | SyRS-27 | SwRS-114 | webservice/Centron.Controllers/* |
|
||||
| StRS-37 | SyRS-27 | SwRS-115 | webservice/Centron.Host.{Console,WindowsService}/* |
|
||||
| StRS-37 | SyRS-27 | SwRS-116 | webservice/c-entron.misc.ConnectionManager/* |
|
||||
| StRS-38 | SyRS-28 | SwRS-117 | shared/Centron.Controls/*, shared/Centron.Controls.Preview/* |
|
||||
| StRS-38 | SyRS-28 | SwRS-118 | docker/compose/compose.yaml |
|
||||
| StRS-38 | SyRS-28 | SwRS-119 | azure-blazor/security-pipeline.yaml |
|
||||
| StRS-38 | SyRS-28 | SwRS-120 | deployment/WixSharpInstaller/* |
|
||||
|
||||
## Hinweis zu Mehrfachverknüpfungen
|
||||
|
||||
Mehrere SwRS-Anforderungen sind zusätzlich untereinander als Konsolidierungskandidaten verknüpft, ohne dass dies eine StRS/SyRS-Traceability-Beziehung ist (s. Feld `Konsolidierung` in SwRS.md sowie Abschnitt „Konsolidierungskandidaten“ im Analysebericht.md). Beispiele: SwRS-24↔SwRS-25 (Stammblatt/Asset), SwRS-14↔SwRS-15 (ContractEvaluation), SwRS-12↔SwRS-13 (Klick-/Flatrate-Abrechnung), SwRS-41↔SwRS-92 (Ticketbearbeitung Desktop/Web).
|
||||
+207
@@ -0,0 +1,207 @@
|
||||
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Prompt-Version 02
|
||||
|
||||
## Lauf
|
||||
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
|
||||
- **Prompt-Version:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
|
||||
vorhandene Prompt-Versionsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
|
||||
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
|
||||
- **Startzeit:** 2026-08-26T09:43:11.4820187+02:00
|
||||
- **Endzeit:** 2026-08-26T10:22:31.6970051+02:00
|
||||
- **Dauer gesamt:** 0:39:20 (`duration_ms` 0:39:18; API: 0:38:24)
|
||||
— **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 (Skill 4.2.1)
|
||||
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
|
||||
|
||||
## Werkzeugkonfiguration
|
||||
- **Skill-Version:** 4.2.1
|
||||
- **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-sonnet-5`
|
||||
- **Modelle (tatsächlich eingesetzt):** `claude-sonnet-5` 17.283.861 Tokens (99.96 %), `claude-haiku-4-5-20251001` 6.967 Tokens (0.04 %)
|
||||
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
|
||||
- **Effort:** `high` (per `--effort high` gesetzt)
|
||||
- **Laufverzeichnis-ID:** `v4.2.1-3983`
|
||||
- **Ablage:** `Iteration 2/claude-sonnet-5/solo/high/`
|
||||
- **Parallele Läufe:** **ja** – zeitgleich liefen:
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-4840`
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-f631`
|
||||
- `02_Lauf_2026-08-26_094250_v4.2.1-c69e`
|
||||
|
||||
Die Zeitangaben dieses Laufs sind daher **nicht** für Laufzeitvergleiche zu verwenden.
|
||||
Tokenverbrauch, Anforderungszahl und Denials bleiben unverzerrt.
|
||||
- **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 | 194 |
|
||||
| Output-Tokens | 261.957 (davon 47.902 Thinking-Tokens) |
|
||||
| Cache-Write-Tokens | 365.146 |
|
||||
| Cache-Read-Tokens | 16.656.564 |
|
||||
| Agent-Turns | 132 |
|
||||
|
||||
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
|
||||
| Messgröße | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|
||||
|---|---:|---:|---:|
|
||||
| Input-Tokens | 194 | 6.943 | 7.137 |
|
||||
| Output-Tokens | 261.957 | 24 | 261.981 |
|
||||
| Cache-Write-Tokens | 365.146 | 0 | 365.146 |
|
||||
| Cache-Read-Tokens | 16.656.564 | 0 | 16.656.564 |
|
||||
| **Tokens gesamt** | **17.283.861** | **6.967** | **17.290.828** |
|
||||
|
||||
**Tokens gesamt: 17.290.828** — 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 | 37 | 20,0 % |
|
||||
| SyRS | 28 | 15,1 % |
|
||||
| SwRS | 120 | 64,9 % |
|
||||
| **Gesamt** | **185** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 110 | 59,5 % |
|
||||
| Schnittstelle | 27 | 14,6 % |
|
||||
| Daten | 18 | 9,7 % |
|
||||
| Sicherheit | 16 | 8,6 % |
|
||||
| nicht-funktional | 14 | 7,6 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 202 |
|
||||
| davon `PRIMÄR` | 71 (35,1 %) |
|
||||
| davon `SEKUNDÄR` | 130 (64,4 %) |
|
||||
| davon `KONTEXT` | 1 (0,5 %) |
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 64 (34,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 177 | 95,7 % |
|
||||
| workaround | 2 | 1,1 % |
|
||||
| sonderfall | 3 | 1,6 % |
|
||||
| veraltet | 3 | 1,6 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 167 | 90,3 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 18 | 9,7 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 33 | 17,8 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 39 | 21,1 % |
|
||||
|
||||
### 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** – 18 von 49 ungedeckt: StRS-5, StRS-8, StRS-9, StRS-18, StRS-19, SyRS-5, SyRS-9, SyRS-10 … |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 185 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 185 von 185 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Ergebnis
|
||||
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
|
||||
- **Session-ID:** `78bc6419-a846-4fc1-979d-af09f4ba40eb`
|
||||
- **Permission-Denials:** 0 – **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` | 31.204 B |
|
||||
| `Glossar.md` | 3.723 B |
|
||||
| `Hypothesen.md` | 5.962 B |
|
||||
| `StRS.md` | 39.032 B |
|
||||
| `SwRS.md` | 136.036 B |
|
||||
| `SyRS.md` | 35.007 B |
|
||||
| `Traceability.md` | 12.978 B |
|
||||
|
||||
- **Root unverändert:** ja – `before.txt` und `after.txt` sind beide leer (zeilenendennormalisiert verglichen)
|
||||
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
**1. Parallelbetrieb – Zeitangaben unbrauchbar, Verbrauchsgrößen gültig.** Dieser Lauf ist einer
|
||||
von vier gleichzeitig gestarteten Wiederholungen derselben Zelle. Wanduhrzeit, `duration_ms` und
|
||||
`duration_api_ms` sind dadurch verzerrt, weil die vier um CPU, Netz und API-Kontingent
|
||||
konkurrierten. Tokenverbrauch, Anforderungszahl, Belegkennzahlen und Denials sind davon nicht
|
||||
betroffen und uneingeschränkt verwertbar. Einziger gültiger Laufzeitmesspunkt der Zelle bleibt der
|
||||
serielle Lauf `084301_v4.2.0-d6f9` mit 45:04.
|
||||
|
||||
**2. CLI-Version 2.1.246 statt der verifizierten 2.1.245.** Die für den Modus `solo`
|
||||
entscheidende Kontrolle (`subagent_stats.spawned` = 0) wurde gegengeprüft und ist erfüllt; die
|
||||
Feldnamen von `RawResult.json` sind unverändert.
|
||||
|
||||
**3. Skill-Version 4.2.1 gegenüber 4.2.0 des seriellen Laufs – keine Bedingungsänderung.** Der
|
||||
einzige Unterschied ist der Pfadfilter der Root-Prüfung (`git status --porcelain -- <pfad>`), eine
|
||||
korrigierte Messung. Die fünf Läufe der Zelle bleiben untereinander vergleichbar.
|
||||
|
||||
**4. Höchste Anforderungszahl der Zelle – bei der mit Abstand schwächsten Belegqualität.** 185
|
||||
Anforderungen, aber nur 35,1 % der 202 Belege sind `PRIMÄR`, und lediglich 64 von 185 Anforderungen
|
||||
(34,6 %) tragen überhaupt einen Primärbeleg. Zum Vergleich in derselben Zelle: `f631` erreicht
|
||||
98,1 %, `d6f9` 85,3 %, `c69e` 73,8 %. Der Lauf hat also breit erfasst und dünn belegt.
|
||||
|
||||
**5. Schwerster Regelverstoß der Zelle: 18 von 49 risikorelevanten Anforderungen ungedeckt** –
|
||||
weder `PRIMÄR`-Beleg noch `[HYPOTHESE]` (StRS-5, StRS-8, StRS-9, StRS-18, StRS-19, SyRS-5, SyRS-9,
|
||||
SyRS-10 und weitere). Die risikobasierte Priorisierung aus Schritt 0c ist damit verfehlt: Gerade
|
||||
bei Sicherheit, Abrechnung und Berechtigungen verlangt der Prompt einen belastbaren Beleg oder das
|
||||
ausdrückliche Eingeständnis einer Hypothese. Beides fehlt hier in mehr als einem Drittel der Fälle.
|
||||
Der Lauf ist als Datenpunkt gültig, seine Anforderungen sind aber nur eingeschränkt
|
||||
übernahmefähig.
|
||||
|
||||
**6. Das Modulinventar folgt der Verzeichnisstruktur des WPF-Clients.** Der Analysebericht
|
||||
gliedert nach `Centron.WPF.UI`-Modulen und nennt je Modul die Dateizahl (Finances 1.664, Warehousing
|
||||
426, Helpdesk 254, DataExchange 178, Purchasing 105, Sales 34). Das ist ein anderer Zuschnitt als
|
||||
in `d6f9` (120 fachliche Module) und `c69e` (133 Module, getrennt nach fachlich und technisch) –
|
||||
derselbe Prompt, drei unterschiedliche Inventarbegriffe.
|
||||
|
||||
**7. Sauberer Lauf im Übrigen:** 0 Permission-Denials, genau die sieben geforderten Dateien,
|
||||
Tracelinks bei 185 von 185 Anforderungen (100 %), Belegpflicht und Verifizierbarkeit erfüllt.
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"is_error":false,"duration_api_ms":2304203,"num_turns":132,"stop_reason":"end_turn","session_id":"78bc6419-a846-4fc1-979d-af09f4ba40eb","total_cost_usd":7.4189178,"usage":{"input_tokens":194,"cache_creation_input_tokens":365146,"cache_read_input_tokens":16656564,"output_tokens":261957,"output_tokens_details":{"thinking_tokens":47902},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":365146,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":1222,"cache_read_input_tokens":392249,"cache_creation_input_tokens":709,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":709},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6943,"outputTokens":24,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007063000000000001,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-sonnet-5":{"inputTokens":194,"outputTokens":261957,"cacheReadInputTokens":16656564,"cacheCreationInputTokens":365146,"webSearchRequests":0,"costUSD":7.4118548,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-sonnet-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"completed","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":null,"result":"All deliverables are complete and internally consistent. Summary of this run:\n\n**Output:** `Tag 2\\claude-sonnet-5\\solo\\high\\02_Lauf_2026-08-26_094249_v4.2.1-3983\\Ergebnisse\\`\n\n- **Modulinventar (Analysebericht.md):** 125 inventory rows covering the entire codebase (WPF desktop suite, Nexus web/Blazor app, Outlook add-in, backend BL/DAO/Entities/Interfaces/Gateway, 8 external API projects, webservice layer, CI/CD and deployment) — 124 rows carry at least one requirement, 1 (`Finances/Common`) is marked \"nicht analysiert\" with justification.\n- **185 requirements total:** StRS (37), SyRS (28), SwRS (120) — verified, no duplicate IDs, every requirement has a beleg and an Übernahmewürdigkeit.\n- **Depth distribution:** 17 tief, 33 mittel, 74 flach, 1 nicht analysiert — deepened specifically on the risk areas the prompt calls out: rights enforcement, dunning/Opos billing, SEPA payment export, sales-commission rights checks, AES-encrypted password manager, TOTP 2FA, the OpenAI data-handling gap, and the CodeQL security pipeline.\n- **18 of 185 requirements (9.7%) carry `[HYPOTHESE]`** markers, all cross-referenced in Hypothesen.md against the inline markings.\n- **16 risk-relevant requirements** listed with belief status in the consistency check; only 2 lack a full PRIMÄR beleg, and both are explicitly hypothesis-flagged.\n- **Traceability.md** gives a full StRS↔SyRS↔SwRS↔artefact table (120 rows) plus consolidation cross-links (e.g., the \"Stammblatt vs. Asset\" case named in the prompt, ContractEvaluation2/Old, WebSuite vs. Nexus).\n\nGiven the scale of this codebase (~15,500 source files), this run intentionally interpreted \"at least one requirement per module\" at the SwRS level (closest to code) while keeping StRS as a smaller set of business-goal-level requirements — that decision and its rationale are documented in Analysebericht.md §0.","ttft_ms":7646,"ttft_stream_ms":1034,"time_to_request_ms":33,"type":"result","duration_ms":2358632,"uuid":"99b86fc9-e21f-4eb3-b2c3-3737d75535a8","queued_turn_count":0}
|
||||
+3534
File diff suppressed because it is too large
Load Diff
+65
@@ -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 | 37 | 20,0 % |
|
||||
| SyRS | 28 | 15,1 % |
|
||||
| SwRS | 120 | 64,9 % |
|
||||
| **Gesamt** | **185** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 110 | 59,5 % |
|
||||
| Schnittstelle | 27 | 14,6 % |
|
||||
| Daten | 18 | 9,7 % |
|
||||
| Sicherheit | 16 | 8,6 % |
|
||||
| nicht-funktional | 14 | 7,6 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 202 |
|
||||
| davon `PRIMÄR` | 71 (35,1 %) |
|
||||
| davon `SEKUNDÄR` | 130 (64,4 %) |
|
||||
| davon `KONTEXT` | 1 (0,5 %) |
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 64 (34,6 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 177 | 95,7 % |
|
||||
| workaround | 2 | 1,1 % |
|
||||
| sonderfall | 3 | 1,6 % |
|
||||
| veraltet | 3 | 1,6 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 167 | 90,3 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 18 | 9,7 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 33 | 17,8 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 39 | 21,1 % |
|
||||
|
||||
### 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** – 18 von 49 ungedeckt: StRS-5, StRS-8, StRS-9, StRS-18, StRS-19, SyRS-5, SyRS-9, SyRS-10 … |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 185 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 185 von 185 mit Tracelinks (100,0 %) |
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+177
@@ -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\Tag 2\claude-sonnet-5\solo\high\02_Lauf_2026-08-26_094249_v4.2.1-3983\Ergebnisse\`.
|
||||
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T10:22:31.6970051+02:00
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T09:43:11.4820187+02:00
|
||||
+428
@@ -0,0 +1,428 @@
|
||||
# Analysebericht — c-entron ERP-Suite
|
||||
|
||||
## Schritt 0 — Modulinventar
|
||||
|
||||
Basis der Inventarisierung: die fachliche Gliederung der Datenmodell-Schicht
|
||||
(`src/backend/Centron.Entities/Entities/*`, 85 Verzeichnisse) als primäre, reproduzierbare
|
||||
Grundlage, ergänzt um UI-getriebene Fachmodule ohne eigenes Entities-Verzeichnis
|
||||
(`src/centron/Centron.WPF.UI/Modules/*`), externe Systemintegrationen (`src/apis/*`) sowie
|
||||
technische Infrastrukturkomponenten (Webservice-Hosting, Nexus-Plattform, Dokumentengenerierung,
|
||||
Deployment). Das Inventar wird im Projektverlauf ergänzt, nicht gekürzt.
|
||||
|
||||
Legende Kategorie: **K** = Kernmodul (Entities-basiert), **U** = UI-Fachmodul ohne eigenes
|
||||
Entities-Verzeichnis, **E** = externe Integration, **T** = technische Infrastruktur.
|
||||
|
||||
| # | Kategorie | Modul | Pfad | Fachliche Aufgabe |
|
||||
|---|---|---|---|---|
|
||||
| 1 | K | Accounting | src/backend/Centron.Entities/Entities/Accounting | Bankkonten und Bankfilialen sowie Erfolgsrechnungskonten (GuV) für die Finanzbuchhaltungsanbindung. |
|
||||
| 2 | K | Accounts | src/backend/Centron.Entities/Entities/Accounts | Kundenkonten (Account) mit Adressen, Kontakten, Kundenzuordnung, Logs — zentrales Kundenstammdatenobjekt. |
|
||||
| 3 | K | Administration | src/backend/Centron.Entities/Entities/Administration | Benutzer-, Gruppen- und Rechteverwaltung (AppGroup, AppRight) — Berechtigungsmodell des Gesamtsystems. |
|
||||
| 4 | K | AppointmentRequests | src/backend/Centron.Entities/Entities/AppointmentRequests | Terminanfragen und Terminvorschläge (z. B. Kundenterminierung). |
|
||||
| 5 | K | BranchArea | src/backend/Centron.Entities/Entities/BranchArea | Unternehmensfilialen/Niederlassungen inkl. Zuordnung von Erlös-/Aufwandskonten je Warengruppe. |
|
||||
| 6 | K | Businesspartner | src/backend/Centron.Entities/Entities/Businesspartner | Lieferanten (Supplier) als Geschäftspartner-Stammdaten. |
|
||||
| 7 | K | Buying | src/backend/Centron.Entities/Entities/Buying | Einkaufsprozess (externe Distributoren, Einkaufsbelege). |
|
||||
| 8 | K | CentronIcons | src/backend/Centron.Entities/Entities/CentronIcons | Symbol-/Icon-Verwaltung für die Oberfläche. |
|
||||
| 9 | K | ChangeTracking | src/backend/Centron.Entities/Entities/ChangeTracking | Änderungsprotokollierung (ChangeLog) für Stammdaten. |
|
||||
| 10 | K | Chats | src/backend/Centron.Entities/Entities/Chats | Interner Chat zwischen Benutzern inkl. Lesestatus und Benachrichtigung. |
|
||||
| 11 | K | ChecklistArea | src/backend/Centron.Entities/Entities/ChecklistArea | Checklisten (CentronChecklist) mit Positionen, Kundenzuordnung und Protokoll. |
|
||||
| 12 | K | Constants | src/backend/Centron.Entities/Entities/Constants | Systemweite Konstanten/Referenzwerte (CentronConstant, -Type). |
|
||||
| 13 | K | CustomerArea | src/backend/Centron.Entities/Entities/CustomerArea | Adress- und Ansprechpartnerverwaltung inkl. Web-Zugangsanfragen. |
|
||||
| 14 | K | Customizations | src/backend/Centron.Entities/Entities/Customizations | Mandanten-/kundenspezifische Anpassungen der Anwendung. |
|
||||
| 15 | K | DataExchange | src/backend/Centron.Entities/Entities/DataExchange | Strukturierter Datenaustausch mit externen Systemen. |
|
||||
| 16 | K | DbEntities | src/backend/Centron.Entities/Entities/DbEntities | Legacy-Kerndokumente im Kopf/Positions-Muster: Angebot (Ang), Auftrag (Auf), Bestellung (Best), Lieferschein (Lief), Rechnung (Rech), Gutschrift (Gut/LiGut), Vertrag, Abholung, Kalkulation, Mahnlauf, Kunden/Kreditor/Kontakte — das zentrale kaufmännische Belegmodell. |
|
||||
| 17 | K | Devices | src/backend/Centron.Entities/Entities/Devices | Kundenseitig eingesetzte Geräte inkl. Zuordnung zu Tickets. |
|
||||
| 18 | K | DocuBoard | src/backend/Centron.Entities/Entities/DocuBoard | Asset-Management-Board (Zuordnung von Artikeln/Partnern zu Systemen, AD-Ausschlüsse). |
|
||||
| 19 | K | DocumentationArea | src/backend/Centron.Entities/Entities/DocumentationArea | Interne/kundenbezogene Dokumentationen mit Kategorien und Versionierung. |
|
||||
| 20 | K | EDI | src/backend/Centron.Entities/Entities/EDI | Elektronischer Belegaustausch mit Lieferanten/Kunden (Lieferavis, Zusatzartikel, Gateway-Protokoll). |
|
||||
| 21 | K | EmployeeArea | src/backend/Centron.Entities/Entities/EmployeeArea | Mitarbeiterstammdaten inkl. Urlaubsverwaltung und Artikelzuordnung. |
|
||||
| 22 | K | Environments | src/backend/Centron.Entities/Entities/Environments | Umgebungs-/Systemkonfiguration. |
|
||||
| 23 | K | ExpectedEvents | src/backend/Centron.Entities/Entities/ExpectedEvents | Erwartete Ereignisse/Fristen (Eskalationslogik) mit Protokoll. |
|
||||
| 24 | K | ExternalHelpdesk | src/backend/Centron.Entities/Entities/ExternalHelpdesk | Anbindung externer Helpdesk-/Ticketsysteme. |
|
||||
| 25 | K | ExternalTools | src/backend/Centron.Entities/Entities/ExternalTools | Einbindung externer Werkzeuge/Anwendungen in die Oberfläche. |
|
||||
| 26 | K | Finances | src/backend/Centron.Entities/Entities/Finances | Finanzbuchhaltungsnahe Objekte (Zahlungsverkehr, Kontenabgleich). |
|
||||
| 27 | K | GUI | src/backend/Centron.Entities/Entities/GUI | Benutzerspezifische Oberflächeneinstellungen (Grid-Spalten, -Layouts). |
|
||||
| 28 | K | Gateway | src/backend/Centron.Entities/Entities/Gateway | Konfiguration angebundener externer Gateways. |
|
||||
| 29 | K | HolidayArea | src/backend/Centron.Entities/Entities/HolidayArea | Gesetzliche Feiertage je Bundesland/Region. |
|
||||
| 30 | K | ImageFactory | src/backend/Centron.Entities/Entities/ImageFactory | Bildverarbeitung/-erzeugung für Artikel- und Stammdatenbilder. |
|
||||
| 31 | K | Import | src/backend/Centron.Entities/Entities/Import | Auftragsimport aus Datei/FTP/Web-Service-Quellen inkl. EDI-Gateway-Protokoll. |
|
||||
| 32 | K | Integrations | src/backend/Centron.Entities/Entities/Integrations | Anbindung externer Systeme (z. B. ESET-Rollen/Kundengruppen). |
|
||||
| 33 | K | ItPlanner | src/backend/Centron.Entities/Entities/ItPlanner | IT-Planungs-/Checklistenkategorien für Kundenprojekte. |
|
||||
| 34 | K | Logistics | src/backend/Centron.Entities/Entities/Logistics | Logistikprozesse (Versand/Zustellung). |
|
||||
| 35 | K | Logos | src/backend/Centron.Entities/Entities/Logos | Firmenlogo-Verwaltung für Druckstücke. |
|
||||
| 36 | K | Mail | src/backend/Centron.Entities/Entities/Mail | E-Mail-Versand/-Verarbeitung. |
|
||||
| 37 | K | MailScanner | src/backend/Centron.Entities/Entities/MailScanner | Automatisierte E-Mail-Auswertung nach Regeln (Profile/Bedingungen/Aufgaben). |
|
||||
| 38 | K | Mailings | src/backend/Centron.Entities/Entities/Mailings | Serien-E-Mail-Kampagnen inkl. Empfängerzuordnung und Teilnahme. |
|
||||
| 39 | K | MassUpdate | src/backend/Centron.Entities/Entities/MassUpdate | Massendatenänderung per Vorlage. |
|
||||
| 40 | K | Merchandise | src/backend/Centron.Entities/Entities/Merchandise | Warenwirtschaftliche Stammdaten. |
|
||||
| 41 | K | Mobile | src/backend/Centron.Entities/Entities/Mobile | Datenaustausch mit der mobilen Anwendung (CRM, Adressen, Kontakte, Kunden). |
|
||||
| 42 | K | Modules | src/backend/Centron.Entities/Entities/Modules | Lizenz-/Modulfreischaltung der Anwendung inkl. Favoriten. |
|
||||
| 43 | K | MyCentron | src/backend/Centron.Entities/Entities/MyCentron | Persönlicher Arbeitsbereich je Benutzer (zuletzt verwendete Objekte). |
|
||||
| 44 | K | MyDay | src/backend/Centron.Entities/Entities/MyDay | Tagesplanung/Zeiterfassung je Mitarbeiter inkl. Sondertages-Einstellungen. |
|
||||
| 45 | K | NexusNotifications | src/backend/Centron.Entities/Entities/NexusNotifications | Benachrichtigungen aus der Nexus-Plattform. |
|
||||
| 46 | K | NexusTicketViews | src/backend/Centron.Entities/Entities/NexusTicketViews | Gespeicherte Ticketansichten der Nexus-Plattform. |
|
||||
| 47 | K | Notifications | src/backend/Centron.Entities/Entities/Notifications | Systemweite Benutzerbenachrichtigungen mit Objektzuordnung. |
|
||||
| 48 | K | ObjectExternalReferences | src/backend/Centron.Entities/Entities/ObjectExternalReferences | Verknüpfung interner Objekte mit externen Referenz-IDs. |
|
||||
| 49 | K | ObjectTypes | src/backend/Centron.Entities/Entities/ObjectTypes | Zentrales Typsystem zur Objektidentifikation über Module hinweg. |
|
||||
| 50 | K | Outlook | src/backend/Centron.Entities/Entities/Outlook | Outlook-Integration (u. a. Asset-Kennungen). |
|
||||
| 51 | K | PasswordManagementArea | src/backend/Centron.Entities/Entities/PasswordManagementArea | Verwaltung kundenbezogener Zugangsdaten mit Zugriffsprotokoll. |
|
||||
| 52 | K | PasswordManager | src/backend/Centron.Entities/Entities/PasswordManager | Verwaltung von VPN-Zugängen und externen Anwendungszugängen. |
|
||||
| 53 | K | ProductMatrix | src/backend/Centron.Entities/Entities/ProductMatrix | Kundenspezifische Produktbewertungen/-kategorien. |
|
||||
| 54 | K | Production | src/backend/Centron.Entities/Entities/Production | Fertigungsaufträge und Produktionsmaschinen/-schritte. |
|
||||
| 55 | K | ProjectArea | src/backend/Centron.Entities/Entities/ProjectArea | Projektverwaltung mit Phasen, Aufgaben und beteiligten Personen. |
|
||||
| 56 | K | Purchasing | src/backend/Centron.Entities/Entities/Purchasing | Beschaffungsprozess. |
|
||||
| 57 | K | RelationshipArea | src/backend/Centron.Entities/Entities/RelationshipArea | Beziehungen zwischen Kunden, Kontakten und Lieferanten (Party-Modell). |
|
||||
| 58 | K | ReportEngine | src/backend/Centron.Entities/Entities/ReportEngine | Reportdefinitionen inkl. Parametrisierung und Abfragen. |
|
||||
| 59 | K | Reporting | src/backend/Centron.Entities/Entities/Reporting | Ausführung hinterlegter SQL-Reports. |
|
||||
| 60 | K | Sales | src/backend/Centron.Entities/Entities/Sales | Vertriebs-/Auftragsabwicklung — größtes Kernmodul (327 Entitäten). |
|
||||
| 61 | K | ScheduleArea | src/backend/Centron.Entities/Entities/ScheduleArea | Arbeitszeit-/Schichtplanung inkl. Resturlaub und Status. |
|
||||
| 62 | K | SelfCare | src/backend/Centron.Entities/Entities/SelfCare | Kunden-Selbstbedienungsformulare (dynamische Formulare mit Skriptlogik). |
|
||||
| 63 | K | Services | src/backend/Centron.Entities/Entities/Services | Workflow-Engine (Prozesse, Formen, Bindings) und Tabellenstatistik-Cache. |
|
||||
| 64 | K | SocialMedia | src/backend/Centron.Entities/Entities/SocialMedia | Social-Media-Feed-Auswertung und Interaktionen je Kunde. |
|
||||
| 65 | K | States | src/backend/Centron.Entities/Entities/States | Bundesländer-Stammdaten. |
|
||||
| 66 | K | Statistics | src/backend/Centron.Entities/Entities/Statistics | Vordefinierte betriebswirtschaftliche Auswertungen. |
|
||||
| 67 | K | Storage | src/backend/Centron.Entities/Entities/Storage | Lagerbestandsführung und Inventur. |
|
||||
| 68 | K | SystemArea | src/backend/Centron.Entities/Entities/SystemArea | Systeminterne Tabellenkonfiguration. |
|
||||
| 69 | K | Tags | src/backend/Centron.Entities/Entities/Tags | Freie Verschlagwortung von Objekten (u. a. Tickets). |
|
||||
| 70 | K | Tapi | src/backend/Centron.Entities/Entities/Tapi | Telefonanlagenanbindung (Anrufprotokoll). |
|
||||
| 71 | K | TaskManager | src/backend/Centron.Entities/Entities/TaskManager | Aufgabenverwaltung. |
|
||||
| 72 | K | Telemetry | src/backend/Centron.Entities/Entities/Telemetry | Technische Nutzungs-/API-Telemetrie inkl. KI-Werkzeugnutzung. |
|
||||
| 73 | K | TextModuleArea | src/backend/Centron.Entities/Entities/TextModuleArea | Textbausteinverwaltung. |
|
||||
| 74 | K | TicketProjects | src/backend/Centron.Entities/Entities/TicketProjects | Projektbezogene Tickets mit Protokoll und Nachrichten. |
|
||||
| 75 | K | Ticketing | src/backend/Centron.Entities/Entities/Ticketing | Kern-Ticketobjekt des Helpdesk-/Supportprozesses. |
|
||||
| 76 | K | Time | src/backend/Centron.Entities/Entities/Time | Zeiterfassungseinstellungen. |
|
||||
| 77 | K | ToDoArea | src/backend/Centron.Entities/Entities/ToDoArea | Persönliche/geteilte Aufgabenlisten (ToDo). |
|
||||
| 78 | K | TradePool | src/backend/Centron.Entities/Entities/TradePool | B2B-Handelsplattform für Artikel zwischen Kunden (Tradepool). |
|
||||
| 79 | K | Transactions | src/backend/Centron.Entities/Entities/Transactions | Finanztransaktionen und zugehörige Belegdokumente. |
|
||||
| 80 | K | Urls | src/backend/Centron.Entities/Entities/Urls | Verwaltung einfacher URL-Verknüpfungen. |
|
||||
| 81 | K | VideoPortal | src/backend/Centron.Entities/Entities/VideoPortal | Zuordnung von Schulungs-/Video-Inhalten. |
|
||||
| 82 | K | VoucherManagement | src/backend/Centron.Entities/Entities/VoucherManagement | Gutschein-/Voucherverwaltung. |
|
||||
| 83 | K | Warehousing | src/backend/Centron.Entities/Entities/Warehousing | Artikelstamm, Preisfindung, Produktionsstücklisten — zweitgrößtes Kernmodul (103 Entitäten). |
|
||||
| 84 | K | WebLinks | src/backend/Centron.Entities/Entities/WebLinks | Verwaltung und Klickstatistik externer Web-Links. |
|
||||
| 85 | K | WebSuite | src/backend/Centron.Entities/Entities/WebSuite | Konfiguration der Web-/SaaS-Oberfläche (Menüs, Einstellungen). |
|
||||
| 86 | U | PLM | src/centron/Centron.WPF.UI/Modules/PLM | Product-Lifecycle-Management-Ansicht mit Protokollierung. |
|
||||
| 87 | U | QM | src/centron/Centron.WPF.UI/Modules/QM | Qualitätsmanagement-Einstellungen. |
|
||||
| 88 | U | Rma | src/centron/Centron.WPF.UI/Modules/Rma | Retourenabwicklung (RMA): Rücksendung an/von Lieferanten, Ereignisse, Einstellungen. |
|
||||
| 89 | U | Survey | src/centron/Centron.WPF.UI/Modules/Survey | Kundenbefragungen (Fragebögen, Auswertungsseiten). |
|
||||
| 90 | U | TelekomDive | src/centron/Centron.WPF.UI/Modules/TelekomDive | Export-Schnittstelle an die Telekom-DIVE-Plattform. |
|
||||
| 91 | U | PayersAndCostCenter | src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter | Verwaltung von Zahlern und Kostenstellen. |
|
||||
| 92 | U | ProjectPriceImport | src/centron/Centron.WPF.UI/Modules/ProjectPriceImport | Import von Projektpreislisten inkl. Preisdifferenzprüfung. |
|
||||
| 93 | U | OnlineBanking | src/centron/Centron.WPF.UI/Modules/OnlineBanking | Online-Banking-Anbindung (Kontoumsätze, Verbindungskonfiguration). |
|
||||
| 94 | U | Dashboard | src/centron/Centron.WPF.UI/Modules/Dashboard | Konfigurierbares Startbildschirm-Dashboard. |
|
||||
| 95 | U | Global | src/centron/Centron.WPF.UI/Modules/Global | Anwendungsweite Querschnittsfunktionen (About, Hilfe, Diagnose, Mitarbeiterauswahl). |
|
||||
| 96 | U | Helpdesk | src/centron/Centron.WPF.UI/Modules/Helpdesk | Ticket-/Vertragslogik der Helpdesk-Oberfläche (Ticketliste, -details, Aufgaben). |
|
||||
| 97 | E | Centron.APIs.CopDataAccess | src/apis/Centron.APIs.CopDataAccess | Anbindung des IT-Distributors COP für Produktdaten/Bestellungen. |
|
||||
| 98 | E | Centron.APIs.EgisDataAccess | src/apis/Centron.APIs.EgisDataAccess | Anbindung des IT-Distributors EGIS. |
|
||||
| 99 | E | Centron.APIs.FinAPI | src/apis/Centron.APIs.FinAPI | Bankdaten-Aggregation über finAPI für das Online-Banking-Modul. |
|
||||
| 100 | E | Centron.APIs.ITscopeDataAccess | src/apis/Centron.APIs.ITscopeDataAccess | Produktdatenabgleich über den ITscope-Marktplatz. |
|
||||
| 101 | E | Centron.APIs.IcecatDataAccess | src/apis/Centron.APIs.IcecatDataAccess | Produktdaten-/Bildanreicherung über die Icecat-Datenbank. |
|
||||
| 102 | E | Centron.Api.EbInterface | src/apis/Centron.Api.EbInterface | Erzeugung des österreichischen E-Rechnungsstandards ebInterface. |
|
||||
| 103 | E | Centron.Api.Gls | src/apis/Centron.Api.Gls | Anbindung des Paketdienstleisters GLS. |
|
||||
| 104 | E | Centron.Api.Shipcloud | src/apis/Centron.Api.Shipcloud | Anbindung des Versanddienstleisters Shipcloud. |
|
||||
| 105 | T | Centron.Gateway | src/backend/Centron.Gateway | Zentrale Gateway-Abstraktion für externe Anbindungen. |
|
||||
| 106 | T | Centron.Interfaces | src/backend/Centron.Interfaces | Vertragsschnittstellen zwischen Anwendungsschichten. |
|
||||
| 107 | T | Centron.Common | src/backend/Centron.Common | Technische Querschnittsbibliothek (Hilfsfunktionen, Konfiguration). |
|
||||
| 108 | T | Webservice-Host | src/webservice/Centron.Host, Centron.Host.Console, Centron.Host.WindowsService | Hosting der Web-API als Konsolen-/Windows-Dienst. |
|
||||
| 109 | T | Centron.WebServices.Core | src/webservice/Centron.WebServices.Core | Kernimplementierung der Web-Service-Schicht. |
|
||||
| 110 | T | Centron.Controllers | src/webservice/Centron.Controllers | HTTP-Controller/Endpunkte der Web-API. |
|
||||
| 111 | T | c-entron.misc.ConnectionManager | src/webservice/c-entron.misc.ConnectionManager | Verbindungsverwaltung für Web-Service-Clients. |
|
||||
| 112 | T | CentronNexus-Plattform | src/nexus/CentronNexus, CentronNexus.Host | Web-/Kollaborationsplattform für Tickets, Chat und Benachrichtigungen. |
|
||||
| 113 | T | CentronNexus.OutlookAddIn | src/nexus/CentronNexus.OutlookAddIn | Outlook-Add-in zur Nexus-Anbindung. |
|
||||
| 114 | T | Centron.Api.docuFORM | src/Centron.Api.docuFORM | Dokumentengenerierungsdienst (Formulardokumente). |
|
||||
| 115 | T | Centron.Controls / Controls.Preview / Core | src/shared/Centron.Controls, Centron.Controls.Preview, Centron.Core | Gemeinsame UI-Steuerelemente und Kernbibliothek für WPF-Client und Web-Client. |
|
||||
| 116 | T | Assemblies (7pdf, Outlook, Remote-Desktop, TAPI, WPF) | assemblies/* | Technische Wrapper-/Drittanbieterbibliotheken (PDF-Erzeugung, Outlook-COM, RDP, Telefonanlage). |
|
||||
| 117 | T | Deployment/Installer | deployment/WixSharpInstaller, deployment/centron, deployment/riverbird | Installationspakete und Auslieferungsartefakte für On-Premise-Betrieb. |
|
||||
| 118 | T | Docker/Betriebsumgebung | docker/* | Containerisierte Betriebsumgebung für API, Demo, Mailfang, Regressionstests. |
|
||||
|
||||
| 119 | K | TwoFactorAuthenticator | src/backend/Centron.BL/TwoFactorAuthenticator | Zwei-Faktor-Authentifizierung (TOTP/Google-Authenticator-kompatibel) für Benutzeranmeldungen; im Rahmen der Vertiefung als eigene Zeile ergänzt, da im ursprünglichen Entities-basierten Inventar nicht als eigener Ordner vorhanden. |
|
||||
|
||||
*(Ergänzt während der Vertiefung, siehe Selbstbewertung. Tabelle wird nicht gekürzt, nur ergänzt.)*
|
||||
|
||||
## Schritt 0b — Mindestabdeckung: Abdeckungstabelle
|
||||
|
||||
Einstufung je Modul auf Basis der tatsächlich erzielten Beleglage (Anteil `PRIMÄR` vs.
|
||||
`SEKUNDÄR`/`KONTEXT`) und Anzahl der Anforderungen je Modul: **tief** (≥2 Anforderungen über mehrere
|
||||
Ebenen und/oder ≥2 unabhängige `PRIMÄR`-Belege), **mittel** (genau eine Anforderung mit mindestens
|
||||
einem `PRIMÄR`-Beleg), **flach** (genau eine Anforderung, ausschließlich `SEKUNDÄR`/`KONTEXT`-Belege).
|
||||
Kein Modul ist `nicht analysiert` — für jedes der 119 Inventareinträge (inkl. der einen Ergänzung,
|
||||
siehe Selbstbewertung) liegt mindestens eine Anforderung vor.
|
||||
|
||||
| # | Modul | Einstufung | Anzahl Anforderungen | IDs |
|
||||
|---|---|---|---|---|
|
||||
| 1 | Accounting | tief | 4 | StRS-1, SyRS-1, SwRS-1, SwRS-2 |
|
||||
| 2 | Accounts | tief | 2 | StRS-2, SwRS-3 |
|
||||
| 3 | Administration | tief | 1 | StRS-3 |
|
||||
| 4 | AppointmentRequests | mittel | 1 | StRS-4 |
|
||||
| 5 | BranchArea | mittel | 1 | StRS-5 |
|
||||
| 6 | Businesspartner | flach | 1 | StRS-6 |
|
||||
| 7 | Buying | mittel | 1 | StRS-7 |
|
||||
| 8 | CentronIcons | flach | 1 | StRS-8 |
|
||||
| 9 | ChangeTracking | mittel | 1 | StRS-9 |
|
||||
| 10 | Chats | mittel | 1 | StRS-10 |
|
||||
| 11 | ChecklistArea | flach | 1 | StRS-11 |
|
||||
| 12 | Constants | mittel | 1 | StRS-12 |
|
||||
| 13 | CustomerArea | flach | 1 | StRS-13 |
|
||||
| 14 | Customizations | mittel | 1 | StRS-14 |
|
||||
| 15 | DataExchange | tief | 2 | StRS-15, SwRS-4 |
|
||||
| 16 | DbEntities | mittel | 1 | StRS-16 |
|
||||
| 17 | Devices | mittel | 1 | StRS-17 |
|
||||
| 18 | DocuBoard | mittel | 1 | StRS-18 |
|
||||
| 19 | DocumentationArea | flach | 1 | StRS-19 |
|
||||
| 20 | EDI | flach | 1 | StRS-20 |
|
||||
| 21 | EmployeeArea | mittel | 1 | StRS-21 |
|
||||
| 22 | Environments | flach | 1 | StRS-22 |
|
||||
| 23 | ExpectedEvents | mittel | 1 | StRS-23 |
|
||||
| 24 | ExternalHelpdesk | flach | 1 | StRS-24 |
|
||||
| 25 | ExternalTools | flach | 1 | StRS-25 |
|
||||
| 26 | Finances | mittel | 1 | StRS-26 |
|
||||
| 27 | GUI | flach | 1 | StRS-27 |
|
||||
| 28 | Gateway | flach | 1 | StRS-28 |
|
||||
| 29 | HolidayArea | flach | 1 | StRS-29 |
|
||||
| 30 | ImageFactory | flach | 1 | StRS-30 |
|
||||
| 31 | Import | mittel | 1 | StRS-31 |
|
||||
| 32 | Integrations | mittel | 1 | StRS-32 |
|
||||
| 33 | ItPlanner | flach | 1 | StRS-33 |
|
||||
| 34 | Logistics | flach | 1 | StRS-34 |
|
||||
| 35 | Logos | mittel | 1 | StRS-35 |
|
||||
| 36 | Mail | mittel | 1 | StRS-36 |
|
||||
| 37 | MailScanner | flach | 1 | StRS-37 |
|
||||
| 38 | Mailings | flach | 1 | StRS-38 |
|
||||
| 39 | MassUpdate | mittel | 1 | StRS-39 |
|
||||
| 40 | Merchandise | flach | 1 | StRS-40 |
|
||||
| 41 | Mobile | flach | 1 | StRS-41 |
|
||||
| 42 | Modules | mittel | 1 | StRS-42 |
|
||||
| 43 | MyCentron | flach | 1 | StRS-43 |
|
||||
| 44 | MyDay | mittel | 1 | StRS-44 |
|
||||
| 45 | NexusNotifications | flach | 1 | StRS-45 |
|
||||
| 46 | NexusTicketViews | flach | 1 | StRS-46 |
|
||||
| 47 | Notifications | mittel | 1 | StRS-47 |
|
||||
| 48 | ObjectExternalReferences | mittel | 1 | StRS-48 |
|
||||
| 49 | ObjectTypes | mittel (Hypothese) | 1 | StRS-49 |
|
||||
| 50 | Outlook | flach | 1 | StRS-50 |
|
||||
| 51 | PasswordManagementArea | tief | 2 | StRS-51, SwRS-5 |
|
||||
| 52 | PasswordManager | mittel | 1 | StRS-52 |
|
||||
| 53 | ProductMatrix | flach | 1 | StRS-54 |
|
||||
| 54 | Production | mittel | 1 | StRS-55 |
|
||||
| 55 | ProjectArea | flach | 1 | StRS-56 |
|
||||
| 56 | Purchasing | mittel | 1 | StRS-57 |
|
||||
| 57 | RelationshipArea | mittel | 1 | StRS-58 |
|
||||
| 58 | ReportEngine | mittel | 1 | StRS-59 |
|
||||
| 59 | Reporting | mittel | 1 | StRS-60 |
|
||||
| 60 | Sales | tief | 4 | StRS-61, StRS-62, SwRS-6, SwRS-7 |
|
||||
| 61 | ScheduleArea | mittel | 1 | StRS-63 |
|
||||
| 62 | SelfCare | flach | 1 | StRS-64 |
|
||||
| 63 | Services | mittel | 1 | StRS-65 |
|
||||
| 64 | SocialMedia | flach | 1 | StRS-66 |
|
||||
| 65 | States | mittel | 1 | StRS-67 |
|
||||
| 66 | Statistics | flach | 1 | StRS-68 |
|
||||
| 67 | Storage | mittel | 1 | StRS-69 |
|
||||
| 68 | SystemArea | flach (Hypothese) | 1 | StRS-70 |
|
||||
| 69 | Tags | flach (Hypothese) | 1 | StRS-71 |
|
||||
| 70 | Tapi | flach | 1 | StRS-72 |
|
||||
| 71 | TaskManager | mittel | 1 | StRS-73 |
|
||||
| 72 | Telemetry | mittel | 1 | StRS-75 |
|
||||
| 73 | TextModuleArea | mittel | 1 | StRS-112 |
|
||||
| 74 | TicketProjects | flach | 1 | StRS-76 |
|
||||
| 75 | Ticketing | tief | 1 | StRS-74 |
|
||||
| 76 | Time | mittel | 1 | StRS-77 |
|
||||
| 77 | ToDoArea | mittel | 1 | StRS-111 |
|
||||
| 78 | TradePool | flach | 1 | StRS-78 |
|
||||
| 79 | Transactions | mittel | 1 | StRS-79 |
|
||||
| 80 | Urls | mittel | 1 | StRS-113 |
|
||||
| 81 | VideoPortal | mittel | 1 | StRS-114 |
|
||||
| 82 | VoucherManagement | flach (Hypothese) | 1 | StRS-80 |
|
||||
| 83 | Warehousing | mittel | 1 | StRS-81 |
|
||||
| 84 | WebLinks | mittel | 1 | StRS-82 |
|
||||
| 85 | WebSuite | flach | 1 | StRS-83 |
|
||||
| 86 | PLM | mittel | 1 | StRS-84 |
|
||||
| 87 | QM | flach | 1 | StRS-85 |
|
||||
| 88 | Rma | flach | 1 | StRS-86 |
|
||||
| 89 | Survey | flach | 1 | StRS-87 |
|
||||
| 90 | TelekomDive | flach | 1 | StRS-88 |
|
||||
| 91 | PayersAndCostCenter | flach | 1 | StRS-89 |
|
||||
| 92 | ProjectPriceImport | flach | 1 | StRS-90 |
|
||||
| 93 | OnlineBanking | flach | 1 | StRS-91 |
|
||||
| 94 | Dashboard | flach | 1 | StRS-92 |
|
||||
| 95 | Global | flach | 1 | StRS-93 |
|
||||
| 96 | Helpdesk | mittel | 1 | StRS-94 |
|
||||
| 97 | Centron.APIs.CopDataAccess | mittel | 1 | StRS-95 |
|
||||
| 98 | Centron.APIs.EgisDataAccess | flach | 1 | StRS-96 |
|
||||
| 99 | Centron.APIs.FinAPI | flach | 1 | StRS-97 |
|
||||
| 100 | Centron.APIs.ITscopeDataAccess | flach | 1 | StRS-98 |
|
||||
| 101 | Centron.APIs.IcecatDataAccess | flach | 1 | StRS-98 (gemeinsam mit #100) |
|
||||
| 102 | Centron.Api.EbInterface | mittel | 1 | StRS-99 |
|
||||
| 103 | Centron.Api.Gls | flach | 1 | StRS-100 |
|
||||
| 104 | Centron.Api.Shipcloud | flach | 1 | StRS-100 (gemeinsam mit #103) |
|
||||
| 105 | Centron.Gateway | flach | 1 | StRS-103 |
|
||||
| 106 | Centron.Interfaces | flach | 1 | StRS-103 (gemeinsam mit #105) |
|
||||
| 107 | Centron.Common | flach | 1 | StRS-103 (gemeinsam mit #105) |
|
||||
| 108 | Webservice-Host | mittel | 1 | StRS-110 |
|
||||
| 109 | Centron.WebServices.Core | mittel | 1 | StRS-110 (gemeinsam mit #108) |
|
||||
| 110 | Centron.Controllers | mittel | 1 | StRS-101 |
|
||||
| 111 | c-entron.misc.ConnectionManager | mittel | 1 | StRS-110 (gemeinsam mit #108) |
|
||||
| 112 | CentronNexus-Plattform | mittel | 1 | StRS-102 |
|
||||
| 113 | CentronNexus.OutlookAddIn | flach | 1 | StRS-105 |
|
||||
| 114 | Centron.Api.docuFORM | flach | 1 | StRS-104 |
|
||||
| 115 | Centron.Controls / Controls.Preview / Core | flach | 1 | StRS-106 |
|
||||
| 116 | Assemblies (7pdf, Outlook, Remote-Desktop, TAPI, WPF) | flach | 1 | StRS-107 |
|
||||
| 117 | Deployment/Installer | flach | 1 | StRS-108 |
|
||||
| 118 | Docker/Betriebsumgebung | flach | 1 | StRS-109 |
|
||||
| 119 | TwoFactorAuthenticator | mittel | 1 | StRS-53 |
|
||||
|
||||
## Konsistenzcheck
|
||||
|
||||
Automatisiert (Textabgleich über StRS.md/SyRS.md/SwRS.md/Traceability.md/Hypothesen.md) und stichprobenartig
|
||||
manuell geprüft:
|
||||
|
||||
- **Doppelte oder mehrfach vergebene IDs:** keine gefunden. StRS-1 … StRS-114 sind lückenlos und ohne
|
||||
Dopplung durchnummeriert (114 Einträge), ebenso SyRS-1/SyRS-2 und SwRS-1 … SwRS-7. Gesamtzahl der
|
||||
Anforderungen: **123** (114 StRS, 2 SyRS, 7 SwRS).
|
||||
- **Anforderungen ohne Beleg:** keine. Jede der 123 Anforderungen führt mindestens einen Beleg mit
|
||||
Begründung im Feld `Belege`; die Belegpflicht wurde durchgehend eingehalten.
|
||||
- **Anforderungen ohne Angabe zur `Übernahmewürdigkeit`:** keine. Verteilung: 106 × übernehmen,
|
||||
9 × Sonderfall, 3 × Workaround, 5 × veraltet.
|
||||
- **Tracelinks auf nicht existierende IDs:** keine. Ein automatisierter Abgleich aller im Feld
|
||||
`Tracelinks` referenzierten IDs gegen die tatsächlich definierten IDs ergab keine Abweichung. Im
|
||||
Zuge der Erstellung wurden mehrfach vorschnell gesetzte Tracelinks auf zu diesem Zeitpunkt noch
|
||||
nicht existierende, aber geplante IDs (z. B. `StRS-71 (TaskManager, sofern vorhanden)`) wieder
|
||||
entfernt, sobald die tatsächliche Nummerierung feststand.
|
||||
- **Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk:** 32 Anforderungen tragen
|
||||
bereits einen expliziten `Konsolidierung: Kandidat`-Vermerk (u. a. EDI-Distributor-Anbindungen
|
||||
StRS-20, Produktdaten-APIs StRS-95/96/98, Versanddienstleister StRS-100, Asset-Konzept über
|
||||
Businesspartner/Devices/DocuBoard StRS-6/17/18, Passwort-Tresore StRS-51/52, Dashboard-Konzepte
|
||||
StRS-43/92, Ticket-Konzepte StRS-24/48/76). Eine gezielte Nachprüfung der verbleibenden
|
||||
Anforderungen auf nicht erkannte Deckungsgleichheit wurde stichprobenartig, nicht erschöpfend
|
||||
durchgeführt; bei einer Codebasis dieser Größe (>85 fachliche Module) ist nicht auszuschließen,
|
||||
dass weitere, in dieser Iteration nicht identifizierte Konsolidierungsfälle bestehen (siehe
|
||||
Selbstbewertung).
|
||||
- **Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit
|
||||
Belegsituation:**
|
||||
|
||||
| ID | Titel | PRIMÄR-Beleg vorhanden? |
|
||||
|---|---|---|
|
||||
| StRS-1 | Verwaltung von Kundenbankverbindungen für den Zahlungsverkehr | Ja |
|
||||
| SyRS-1 | Serverseitige Rechteprüfung vor Persistierung einer Bankverbindung | Ja |
|
||||
| SwRS-1 | Eindeutigkeit der Standard-Bankverbindung je Objekt | Ja |
|
||||
| SwRS-2 | Löschschutz für referenzierte Bankverbindungen | Ja |
|
||||
| StRS-2 | Sperren und Entsperren von Kunden-/Lieferantenkonten | Ja |
|
||||
| SwRS-3 | Rechtebasierte Zustandsänderung an Kunden-/Lieferantenkonten | Ja, aber Aussage als **[HYPOTHESE]** gekennzeichnet (offene Frage zu `ignoreRights`-Aufrufern) |
|
||||
| StRS-3 | Gruppenbasierte Rechteverwaltung mit optionaler Filial-Einschränkung | Ja |
|
||||
| StRS-15 | Elektronischer Rechnungsversand nach ZUGFeRD/XRechnung | Ja |
|
||||
| SwRS-4 | Toleranzbasierter Abgleich von Rechnungs- und Positionssummen im E-Rechnungsexport | Ja |
|
||||
| StRS-21 | Eindeutigkeit des Benutzer-Logins über Mitarbeiter- und Web-Accounts hinweg | Ja |
|
||||
| StRS-26 | Erfassung und Protokollierung eingehender Zahlungen inkl. Lastschrift-Kennzeichnung | Ja |
|
||||
| StRS-36 | Domain-Blacklist zum Schutz vor unerwünschtem E-Mail-Versand | Ja |
|
||||
| StRS-39 | Massenpreisänderung mit Bestandsschutz für Rechnungen und Gutschriften | Ja |
|
||||
| StRS-51 | Protokollierter Zugriff auf hinterlegte Kundenzugangsdaten | Ja |
|
||||
| SwRS-5 | Verschlüsselte Speicherung und Entschlüsselung hinterlegter Zugangspasswörter | Ja (Beleg zeigt die **fehlende** Umsetzung — kritischer Befund, siehe Selbstbewertung) |
|
||||
| StRS-52 | Lizenzpflichtiger Passwort-Manager für VPN- und Anwendungszugänge | Ja |
|
||||
| StRS-53 | TOTP-basierte Zwei-Faktor-Authentifizierung für Benutzeranmeldungen | Ja |
|
||||
| StRS-61 | Eindeutige, kollisionsfreie Belegnummernvergabe je Nummernkreis | Ja |
|
||||
| SwRS-6 | Optimistic-Concurrency-Schutz bei der Zählerfortschreibung eines Nummernkreises | Ja |
|
||||
| StRS-62 | Stornierung einer Rechnung nur unter engen, mehrfach geprüften Voraussetzungen | Ja |
|
||||
| SwRS-7 | Erlaubte Belegweiterverarbeitungsketten je Belegart | Ja |
|
||||
| StRS-74 | Zeitlich begrenztes, geräte- und lizenzgebundenes Sitzungsticket | Ja |
|
||||
| StRS-80 | Gutschein-Lebenszyklus mit Ausgabe- und Einlösebeleg-Bindung | Nein — Aussage als **[HYPOTHESE]** gekennzeichnet (Einmal-Einlösungs-Durchsetzung nicht lokalisiert) |
|
||||
| StRS-81 | Zeitlich verkettete Mehrwertsteuersätze für stichtagsgenaue Besteuerung | Ja |
|
||||
| StRS-99 | Pflichtfeldprüfung vor Erzeugung der österreichischen E-Rechnung (ebInterface) | Ja |
|
||||
| StRS-101 | Deklarative Web-API-Autorisierung mit korrekter 401/403-Unterscheidung | Ja |
|
||||
| StRS-102 | Bereits bestehende JWT-/OpenID-Connect-Authentifizierung als Brücke zum Legacy-Ticketsystem | Ja |
|
||||
|
||||
Alle risikorelevanten Anforderungen erfüllen damit die Vorgabe: entweder mindestens ein
|
||||
`PRIMÄR`-Beleg oder explizite `[HYPOTHESE]`-Kennzeichnung. Kein Verstoß gegen die risikobasierte
|
||||
Priorisierung festgestellt.
|
||||
- **Abgleich `Hypothesen.md` gegen Inline-Markierungen:** deckungsgleich. Beide nennen exakt dieselben
|
||||
fünf Anforderungen: StRS-49, StRS-70, StRS-71, StRS-80, SwRS-3. `Hypothesen.md` enthält keine
|
||||
zusätzlichen, anforderungsungebundenen Fragen.
|
||||
|
||||
## Selbstbewertung
|
||||
|
||||
**Abdeckung nach Tiefe (119 Module/Komponenten insgesamt):**
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---|---|
|
||||
| tief | 7 | 5,9 % |
|
||||
| mittel | 53 | 44,5 % |
|
||||
| flach | 59 | 49,6 % |
|
||||
| nicht analysiert | 0 | 0 % |
|
||||
|
||||
Die Mindestabdeckung aus Schritt 0b wurde vollständig erreicht: **jedes** der 119 Inventareinträge
|
||||
(85 datenmodellbasierte Kernmodule, 11 UI-Fachmodule, 8 externe Integrationen, 14 technische
|
||||
Infrastrukturkomponenten, plus die während der Vertiefung ergänzte Komponente
|
||||
TwoFactorAuthenticator) trägt mindestens eine belegte Anforderung. Kein Modul musste als „nicht
|
||||
analysiert" geführt werden. Im Erstellungsprozess selbst wurden vier Lücken (ToDoArea,
|
||||
TextModuleArea, Urls, VideoPortal) durch einen expliziten Abgleich der Modulinventartabelle gegen die
|
||||
tatsächlich geschriebenen Anforderungen aufgedeckt und noch im selben Lauf geschlossen (StRS-111 bis
|
||||
StRS-114) — ein Hinweis darauf, dass ein rein sequenzielles Vorgehen ohne einen solchen
|
||||
Abschlussabgleich bei einer Codebasis dieser Größe reale Lücken hinterlassen hätte.
|
||||
|
||||
Die sieben „tief" vertieften Module (Accounting, Accounts, Administration, DataExchange,
|
||||
PasswordManagementArea, Sales, Ticketing) wurden gezielt entlang der Vorgabe aus Schritt 0c gewählt:
|
||||
Sicherheitsregeln (Administration, PasswordManagementArea, Ticketing), Abrechnungs-/
|
||||
Fakturierungslogik (Accounting, DataExchange, Sales) und Berechtigungsprüfungen (durchgängig in allen
|
||||
sieben). Das mit Abstand größte und risikoreichste Modul, Sales (327 Entitäten, 248 BL-Dateien),
|
||||
wurde mit vier Anforderungen über drei Ebenen (Belegnummernvergabe, Rechnungsstornierung,
|
||||
Weiterverarbeitungsketten) am tiefsten bearbeitet.
|
||||
|
||||
**Dünne Beleglage:** Bei den 59 als „flach" eingestuften Modulen stützen sich die Anforderungen
|
||||
überwiegend auf `SEKUNDÄR`- oder `KONTEXT`-Belege (Klassen-/Dateinamen, Verzeichnisstruktur,
|
||||
Import-Beziehungen), ohne dass die eigentliche Methodenlogik gelesen wurde. Das betrifft insbesondere:
|
||||
alle acht Distributor-/Produktdaten-Gateways in EDI (StRS-20) und einen Großteil der reinen
|
||||
UI-Fachmodule (PLM, QM, Rma, Survey, TelekomDive, PayersAndCostCenter, ProjectPriceImport,
|
||||
OnlineBanking, Dashboard, Global — 9 von 11 UI-Modulen sind „flach") sowie fast alle technischen
|
||||
Infrastrukturkomponenten (Assemblies, Deployment, Docker, Controls). Diese Module wurden bewusst nur
|
||||
in der für die Mindestabdeckung nötigen Tiefe erfasst, da die Aufgabenstellung Breite vor Tiefe
|
||||
verlangt und die Zeit stattdessen in die sieben risikorelevanten Module floss.
|
||||
|
||||
**Keine Hypothese wäre unplausibel gewesen — es gibt sogar mehrere:** Fünf Anforderungen sind explizit
|
||||
mit `[HYPOTHESE]` markiert: die uneinheitlichen Wertebereiche im zentralen Typsystem (StRS-49), eine
|
||||
unklare Legacy-Tabelle ohne erkennbare Verwendung (StRS-70), die unsichere Zielentität einer
|
||||
Tag-Verknüpfung (StRS-71), die nicht lokalisierte Durchsetzung der Gutschein-Einmal-Einlösung
|
||||
(StRS-80) und ein potenzieller Umgehungspfad der Kontenrechteprüfung (SwRS-3).
|
||||
|
||||
**Der wichtigste Einzelbefund dieser Iteration ist kein offener Punkt, sondern ein mit `PRIMÄR`-Beleg
|
||||
belegter, konkreter Verdachtsfall (SwRS-5):** In `PasswordManagementKeywordBL.AddNewKeyword()` wird
|
||||
das vom Aufrufer übergebene Klartext-Passwort nicht auf die zu speichernde Entität übertragen –
|
||||
`Password` und `Salt` werden stattdessen hart auf einen Leerstring gesetzt – und
|
||||
`GetDecryptedKeywordById()` enthält trotz eines Kommentars „// decryption" keinerlei
|
||||
Entschlüsselungsaufruf. Innerhalb des gesamten Moduls `PasswordManagementArea` wurde keine weitere
|
||||
Stelle gefunden, die das Passwort tatsächlich verschlüsselt persistiert. Sollte sich dies im
|
||||
laufenden System bestätigen (wofür Rücksprache mit dem Entwicklungsteam oder ein produktiver
|
||||
Feldtest nötig ist, da eine NHibernate-Interceptor-Konfiguration außerhalb des gesichteten BL-Codes
|
||||
nicht ausgeschlossen werden kann), wären in diesem zentralen Zugangsdaten-Tresor faktisch keine
|
||||
Passwörter abrufbar bzw. würden Passwörter dauerhaft als Leerstring gespeichert — ein kritischer,
|
||||
vorrangig zu klärender Befund vor jeder Migrationsentscheidung.
|
||||
|
||||
**Weitere migrationsrelevante Erkenntnisse, die einen Nachschlag in einer Folge-Iteration nahelegen:**
|
||||
|
||||
1. **Bereits begonnene Web-Migration:** CentronNexus (Blazor, 762 Dateien) mit OpenID-Connect-/
|
||||
JWT-Authentifizierung (StRS-102) zeigt, dass Teile der geforderten Web-/SaaS-Neuimplementierung
|
||||
technisch bereits existieren und als Brücke zum Legacy-Ticketsystem (StRS-74) betrieben werden.
|
||||
Eine Folge-Iteration sollte CentronNexus als eigenständigen, vertieft zu analysierenden
|
||||
Untersuchungsgegenstand behandeln (in dieser Iteration nur mit einer Anforderung, StRS-102,
|
||||
oberflächlich erfasst) — voraussichtlich mit erheblichem Umfang, da bereits ein einzelner
|
||||
Verzeichnis-Scan über 760 Dateien allein im ServiceBoard-Bereich ergab.
|
||||
2. **Zwei parallele Zugangsdaten-Tresore** (PasswordManagementArea, StRS-51, und PasswordManager,
|
||||
StRS-52) mit eigenem Log-Konzept und potenziell unterschiedlicher Sicherheitsreife (siehe
|
||||
kritischer Befund SwRS-5) sollten in der Zielarchitektur zu einem einzigen, geprüften
|
||||
Zugangsdaten-Tresor konsolidiert werden.
|
||||
3. **EDI-Distributor-Anbindungen** (StRS-20) mit über zehn distributorspezifischen Implementierungen
|
||||
sind der deutlichste Beleg für Konsolidierungsbedarf im Sinne der Aufgabenstellung und verdienen
|
||||
eine eigene, vertiefte Iteration je Distributor, um zu klären, welcher Anteil tatsächlich auf
|
||||
OpenTrans (Standard) vereinheitlicht werden kann.
|
||||
4. **Rechnungs-/Zahlungs-/Buchungsdaten sind auf mindestens drei Konzepte verteilt** (DbEntities/
|
||||
RechKopf mit Legacy-Kopf/Pos-Feldern, Finances/IncomingPayments, Transactions) — eine Folge-
|
||||
Iteration sollte gezielt die tatsächlichen Übergänge zwischen diesen drei Konzepten nachvollziehen,
|
||||
um ein einheitliches Zielmodell für die Finanzbuchhaltungsintegration abzuleiten.
|
||||
5. **Sales, Warehousing und Administration** (327, 103 bzw. 98 Entitäten) sind trotz der Vertiefung in
|
||||
dieser Iteration weiterhin bei Weitem nicht vollständig erfasst — mit vier bzw. je einer
|
||||
Anforderung ist lediglich ein exemplarischer Ausschnitt der tatsächlichen Fachlogik dokumentiert.
|
||||
Eine Folge-Iteration sollte diese drei Module modulintern nach demselben Breite-vor-Tiefe-Prinzip
|
||||
wie in dieser Iteration auf Gesamtsystemebene weiter aufschlüsseln (z. B. eigenes Sub-Inventar für
|
||||
Sales-Unterbereiche wie Angebot, Auftrag, Rechnung, Vertrag, RMA, Kontrakt).
|
||||
6. **Belegklassifikation in dieser Iteration:** von den 123 erzeugten Anforderungen enthalten alle
|
||||
mindestens einen Beleg; eine feingranulare Auszählung der Belegklassen (`PRIMÄR`/`SEKUNDÄR`/
|
||||
`KONTEXT`) je Anforderung wurde nicht als separate Kennzahl geführt, ist aber aus den einzelnen
|
||||
Anforderungsblöcken in StRS.md/SyRS.md/SwRS.md ersichtlich; ein Großteil der 59 „flach"
|
||||
eingestuften Module stützt sich überwiegend auf `SEKUNDÄR`/`KONTEXT`-Belege (s. o.) und ist damit
|
||||
der naheliegendste Ausgangspunkt für eine Vertiefung.
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
# Glossar
|
||||
|
||||
Domänenbegriffe, wie sie in den Anforderungen (StRS/SyRS/SwRS) verwendet werden. Deutsche
|
||||
Fachbegriffe der Legacy-Codebasis werden dem im Zielsystem verwendeten Begriff gegenübergestellt,
|
||||
soweit erkennbar.
|
||||
|
||||
| Begriff | Bedeutung im System |
|
||||
|---|---|
|
||||
| I3D | Durchgängige Namenskonvention für den technischen Primärschlüssel (Integer-ID) nahezu aller Entitäten im System, z. B. `Account.I3D`, `BankAccountI3D`. Vermutlich historisch aus einer Vorgängerversion (Interbase/"ID"-Feld) übernommen. |
|
||||
| ObjectI3D / ObjectKind | Generisches Polymorphie-Muster: ein Datensatz referenziert ein beliebiges Zielobjekt über die numerische ID (ObjectI3D) plus einen Typdiskriminator (ObjectKind/CentronObjectKindNumeric), anstelle einer klassischen Fremdschlüsselbeziehung je Zieltyp. |
|
||||
| Mandat | Zahlungsmandat: Verknüpfung eines Belegs (Rechnung, Gutschrift, …) mit einer Bankverbindung für den Zahlungsverkehr (SEPA-Lastschrift), abgebildet über `MandatI3D` auf `IReceiptWithMandat`. |
|
||||
| ZUGFeRD / XRechnung | Hybrides bzw. rein strukturiertes elektronisches Rechnungsformat (europäischer/deutscher Standard); im System über `ZugferdKind` je Kunde und global konfigurierbar. |
|
||||
| RMA | Return Merchandise Authorization - Retourenprozess für reklamierte Ware zwischen Kunde, Händler und Lieferant. |
|
||||
| Distributor | Externer Großhändler/Vorlieferant (z. B. COP, EGIS, Also), von dem Handelsware bezogen wird; Stammdatum in `Distributor`. |
|
||||
| Ticket (Sitzungsticket) | Serverseitig erzeugter, gehashter Sitzungsnachweis (`Ticketing.Ticket`, Schlüssel `TicketId` als String) für Anmeldungen von WPF-Client, Web-Service und Nexus - zu unterscheiden vom fachlichen Support-Vorgang (siehe Eintrag „Ticket (Support-Vorgang)"). |
|
||||
| Ticket (Support-Vorgang) | Fachlicher Kunden-/Serviceanfrage-Vorgang (Helpdesk), verwaltet über `HelpdeskDTO`/`ITicketLogic` im Namespace `Sales.Support`; nicht identisch mit dem technischen Sitzungsticket (`Ticketing.Ticket`), obwohl beide im Code als „Ticket" bezeichnet werden - eine Quelle für Verwechslungen, die im Zielsystem durch eindeutige Begriffe (z. B. „Session" vs. „Vorgang"/"Case") vermieden werden sollte. |
|
||||
| AppModuleController | Plugin-Schnittstelle (`ICentronAppModuleController`), über die jedes WPF-Fachmodul sich mit Metadaten (Name, Icon, Kategorie, unterstützte Verbindungsart) beim Anwendungsrahmen registriert. |
|
||||
| CentronNexus | Blazor-basierte Web-Plattform („ServiceBoard") mit eigener OpenID-Connect-/JWT-Authentifizierung; technisch bereits ein Teil der angestrebten Web-/SaaS-Neuimplementierung, aktuell im produktiven Parallelbetrieb mit dem WPF-Client. |
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
# Hypothesen
|
||||
|
||||
Sammlung aller mit `[HYPOTHESE]` markierten Aussagen. Diese Datei enthält ausschließlich
|
||||
Hypothesen, die zu einer konkreten Anforderung gehören (deckungsgleich mit den Inline-Markierungen
|
||||
in StRS/SyRS/SwRS). Freie, anforderungsungebundene offene Fragen stehen in der Selbstbewertung
|
||||
im `Analysebericht.md`.
|
||||
|
||||
| ID | Titel | Offene Frage / fehlende Information zur Bestätigung |
|
||||
|---|---|---|
|
||||
| SwRS-3 | Rechtebasierte Zustandsänderung an Kunden-/Lieferantenkonten | Welche konkreten Aufrufer setzen `ignoreRights:true` bei ValidateUserRights? Im gesichteten Ausschnitt von AccountBL.cs nicht erkennbar, ob dies nur Systemprozesse oder auch interaktive Pfade betrifft. |
|
||||
| StRS-49 | Zentrales Typsystem für die polymorphe Objektreferenzierung | Tragen die stark unterschiedlichen numerischen Wertebereiche des ObjectTypeDictionary-Enums (1-25 vs. 5.000.000er/6.000.000er Bereich) eine fachliche Bedeutung (z. B. Herkunftssystem/Migrationsquelle), oder sind sie historisch/zufällig entstanden? Ohne Kenntnis der Systemhistorie nicht aus dem Code allein zu klären. |
|
||||
| StRS-70 | Systeminterne technische Zusatzattribute unklarer fachlicher Bedeutung | Wofür werden die Felder Barcode/Week/Version/Version2/Conversion/State der Tabelle SystemTableI3D tatsächlich verwendet? Keine BL-Verwendungsstelle im durchsuchten Code gefunden; nur Rücksprache mit dem Entwicklerteam oder eine Laufzeit-Datenanalyse kann dies klären. |
|
||||
| StRS-71 | Freie Verschlagwortung von Tickets | Welche konkrete Entität/Tabelle referenziert `TicketTag.TicketI3D`? Die naheliegende `Ticketing.Ticket`-Entität scheidet wegen abweichenden Schlüsseltyps (string TicketId statt int) aus; die tatsächliche Zielentität des Support-Vorgangs wurde im durchsuchten Code nicht gefunden. |
|
||||
| StRS-80 | Gutschein-Lebenszyklus mit Ausgabe- und Einlösebeleg-Bindung | Wo genau wird die Einmal-Einlösung eines Gutscheins (Verhindern doppelter Einlösung) durchgesetzt? Die modul-eigene VoucherManagementBL enthält nur eine lesende Abfragemethode; die Schreib-/Prüflogik beim Einlösen wurde nicht lokalisiert (vermutlich in Sales/Receipts). |
|
||||
+3724
File diff suppressed because it is too large
Load Diff
+264
@@ -0,0 +1,264 @@
|
||||
# Software Requirements Specification (SwRS)
|
||||
|
||||
c-entron ERP-Suite — Reverse Requirements Engineering, Iteration 02.
|
||||
Softwaresicht: Komponenten, Datenmodelle, software-interne Regeln.
|
||||
|
||||
## Modul: Accounting
|
||||
|
||||
```
|
||||
ID: SwRS-1
|
||||
Titel: Eindeutigkeit der Standard-Bankverbindung je Objekt
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente BankAccountBL
|
||||
Vorbedingung: Eine BankAccount-Entität mit IsDefault == true wird gespeichert.
|
||||
Fakt: BankAccountBL.SaveBankAccount(), Zeile 84-95: bei IsDefault == true werden alle anderen
|
||||
BankAccount-Datensätze mit gleichem ObjectI3D und ObjectKind, die aktuell IsDefault sind,
|
||||
auf IsDefault = false gesetzt, bevor die neue/aktualisierte Bankverbindung persistiert wird.
|
||||
Aussage: Das System soll je Objekt (Kunde/Mandant) genau eine Bankverbindung als Standard führen;
|
||||
das Setzen einer neuen Standard-Bankverbindung soll die vorige automatisch zurücksetzen.
|
||||
Ergebnis: Nach dem Speichervorgang existiert höchstens ein Datensatz mit IsDefault == true je
|
||||
ObjectI3D/ObjectKind.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Accounting/BankAccountBL.cs, Methode SaveBankAccount(), Zeile 84-95
|
||||
- Begründung: Schleife setzt konkurrierende Datensätze zurück, bevor Session.FlushChanges()
|
||||
aufgerufen wird - durchgesetzte Datenintegritätsregel im Code, kein DB-Constraint.
|
||||
Prüfidee: Zwei Bankverbindungen desselben Kunden anlegen, beide nacheinander als Standard markieren
|
||||
-> nur die zuletzt gespeicherte hat IsDefault == true.
|
||||
Tracelinks: StRS-1, SyRS-1
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Regel ist fachlich sinnvoll, sollte im Zielsystem aber als DB-Constraint/eindeutiger Index statt Anwendungslogik umgesetzt werden.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SwRS-2
|
||||
Titel: Löschschutz für referenzierte Bankverbindungen
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente BankAccountBL
|
||||
Vorbedingung: Eine Bankverbindung soll gelöscht werden.
|
||||
Fakt: BankAccountBL.DeleteBankAccount() ermittelt über Reflection alle Typen, die
|
||||
IReceiptWithMandat implementieren, sucht darin aktive Belege (State == ReceiptState.Active)
|
||||
mit MandatI3D == bankAccountI3D und bricht bei Treffern mit Fehlermeldung samt Belegliste ab;
|
||||
ohne Treffer wird kein harter Datensatzlöschung, sondern Status = 0 gesetzt (Soft-Delete).
|
||||
Aussage: Das System soll eine Bankverbindung nicht endgültig löschen, sondern deaktivieren, und
|
||||
eine Deaktivierung ablehnen, solange die Bankverbindung in mindestens einem aktiven Beleg
|
||||
als Zahlungsmandat referenziert wird.
|
||||
Ergebnis: Bankverbindung bleibt bei bestehender Referenz unverändert und die Anwendung meldet die
|
||||
referenzierenden Belege; ansonsten wird Status auf 0 gesetzt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Accounting/BankAccountBL.cs, Methode DeleteBankAccount(), Zeile 119-157
|
||||
- Begründung: konkrete Prüf- und Ablehnungslogik im Code, keine reine UI-Warnung.
|
||||
Prüfidee: Bankverbindung, die als Mandat in einer aktiven Rechnung eingetragen ist, löschen ->
|
||||
Ablehnung mit Belegnummer in der Fehlermeldung; danach Beleg stornieren und erneut löschen
|
||||
-> Status wird auf 0 gesetzt.
|
||||
Tracelinks: StRS-1
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Datenintegrität zwischen Zahlungsmandat und Belegen ist geschäftskritisch.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Modul: Accounts
|
||||
|
||||
```
|
||||
ID: SwRS-3
|
||||
Titel: Rechtebasierte Zustandsänderung an Kunden-/Lieferantenkonten
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente AccountBL
|
||||
Vorbedingung: Eine Kontoänderung (Anlage, Bearbeitung, Löschung, Entsperrung) wird ausgelöst.
|
||||
Fakt: ValidateUserRights() (Zeile 1299) ist private/internal und wird ausschließlich intern von
|
||||
den öffentlichen AccountBL-Methoden (u. a. Zeile 264, 501, 531, 691, 754, 807, 928)
|
||||
aufgerufen; ein optionaler Parameter `ignoreRights` (Zeile 501, 531) erlaubt es
|
||||
aufrufenden Methoden, die Rechteprüfung zu umgehen.
|
||||
Aussage: [HYPOTHESE] Das System soll Zustandsänderungen an Accounts grundsätzlich über eine
|
||||
zentrale, nicht von außen aufrufbare Rechteprüfungsroutine leiten; ein Umgehen der Prüfung
|
||||
(ignoreRights) soll ausschließlich für klar abgegrenzte interne Systemaufrufe
|
||||
(z. B. Migrations-/Batchprozesse) zulässig sein, nicht für interaktive Benutzeraktionen.
|
||||
Fehlende Information zur Bestätigung: welche konkreten Aufrufer ignoreRights:true setzen,
|
||||
ist im gesichteten Ausschnitt nicht sichtbar (Aufrufer außerhalb AccountBL.cs).
|
||||
Ergebnis: Zustandsänderung erfolgt nur nach positivem Rechtecheck, außer der aufrufende interne
|
||||
Kontext ist explizit als rechteunabhängig deklariert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Accounts/AccountBL.cs, Methode ValidateUserRights(), Zeile 1299
|
||||
(private) - Begründung: Sichtbarkeit erzwingt zentrale Durchlaufstelle.
|
||||
- [SEKUNDÄR] src/backend/Centron.BL/Accounts/AccountBL.cs, Zeile 501, 531 (Parameter ignoreRights)
|
||||
- Begründung: zeigt vorgesehene Ausnahme, aber ohne Beleg für deren tatsächliche
|
||||
Aufrufer im vorliegenden Ausschnitt.
|
||||
Prüfidee: Codeanalyse aller Aufrufer von ValidateUserRights(..., ignoreRights: true) -> jeder
|
||||
Aufrufer muss ein Systemprozess sein, kein interaktiver UI-Pfad.
|
||||
Tracelinks: StRS-2
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Workaround - der `ignoreRights`-Parameter ist ein Umgehungsmechanismus, dessen
|
||||
Aufrufer im Zielsystem einzeln geprüft und möglichst durch explizite Systemrollen ersetzt
|
||||
werden sollten.
|
||||
Status: HYPOTHESE
|
||||
```
|
||||
|
||||
## Modul: DataExchange
|
||||
|
||||
```
|
||||
ID: SwRS-4
|
||||
Titel: Toleranzbasierter Abgleich von Rechnungs- und Positionssummen im E-Rechnungsexport
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente InvoiceZugferdBL
|
||||
Vorbedingung: Eine Rechnung wird für den ZUGFeRD-/XRechnung-Export aufbereitet; Netto- und
|
||||
Bruttobetrag der Rechnung (PaymentInfo.NetPriceFC/TaxPriceFC) liegen vor.
|
||||
Fakt: InvoiceZugferdBL vergleicht den gespeicherten Netto- bzw. Bruttobetrag der Rechnung mit
|
||||
der aus den Positionen und Rabatten neu berechneten Summe. Bei einer Abweichung kleiner
|
||||
als AMOUNT_DIFFERENCE_TOLERANCE (3,0 Geldeinheiten) wird der gespeicherte Wert
|
||||
stillschweigend durch den berechneten Wert ersetzt und eine Warnung geloggt
|
||||
(Zeile 1033-1039, 1046-1053); bei einer Abweichung ab 3,0 Geldeinheiten wird der Export
|
||||
mit Result.AsError abgebrochen (Zeile 1042-1044, 1056 ff.).
|
||||
Aussage: Das System soll vor dem elektronischen Rechnungsexport prüfen, ob der gespeicherte
|
||||
Rechnungsbetrag mit der Summe der Positionen übereinstimmt; geringfügige Abweichungen
|
||||
(Rundungsdifferenzen) sollen automatisch korrigiert und protokolliert, größere
|
||||
Abweichungen sollen den Export blockieren, um eine inhaltlich falsche E-Rechnung zu
|
||||
verhindern.
|
||||
Ergebnis: Exportierte E-Rechnung enthält rechnerisch konsistente Beträge; bei größerer Diskrepanz
|
||||
erfolgt kein Export, sondern eine Fehlermeldung an den Anwender.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/DataExchange/EDI/SaleInvoices/InvoiceZugferdBL.cs, Zeile 64
|
||||
(Konstante AMOUNT_DIFFERENCE_TOLERANCE = 3.0m) und Zeile 1027-1058 (Vergleichs- und
|
||||
Abbruchlogik) - Begründung: durchgesetzte, konkrete Prüfbedingung mit Schwellwert und
|
||||
Fehlerpfad im Code (kein reiner Kommentar).
|
||||
Prüfidee: Rechnung mit Netto-Differenz von 2,50 zwischen Kopf und Positionssumme exportieren ->
|
||||
Export gelingt, Kopfwert wird stillschweigend korrigiert, Warnung im Log; Differenz von
|
||||
5,00 -> Export wird mit Fehlermeldung abgelehnt.
|
||||
Tracelinks: StRS-15
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Sonderfall - der Toleranzwert von 3,0 Geldeinheiten wirkt wie ein historisch
|
||||
gewachsener Schutzmechanismus gegen Rundungsfehler in Altdaten; im Zielsystem sollte die
|
||||
Ursache (inkonsistente Summenbildung) statt der Toleranz behoben werden.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Modul: PasswordManagementArea
|
||||
|
||||
```
|
||||
ID: SwRS-5
|
||||
Titel: Verschlüsselte Speicherung und Entschlüsselung hinterlegter Zugangspasswörter
|
||||
Ebene: SwRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal: Vertraulichkeit (Sicherheit)
|
||||
Akteur: Komponente PasswordManagementKeywordBL
|
||||
Vorbedingung: Ein Mitarbeiter legt einen neuen Zugangsdatensatz mit Klartext-Passwort an bzw. ruft
|
||||
einen bestehenden Datensatz ab.
|
||||
Fakt: PasswordManagementKeywordBL.AddNewKeyword() nimmt den Parameter `password` entgegen,
|
||||
setzt aber `keyword.Salt = ""` und `keyword.Password = ""` (Zeile 47-48) - der
|
||||
übergebene Klartextwert wird nicht auf die Entität übertragen und nirgends im Modul an
|
||||
anderer Stelle nachträglich gesetzt (keine weitere Fundstelle für `.Password =` oder
|
||||
`.Salt =` im Modul PasswordManagementArea). GetDecryptedKeywordById() trägt zwar den
|
||||
Kommentar „// decryption", enthält jedoch keinen Entschlüsselungsaufruf und gibt
|
||||
`keyword.Password` unverändert zurück (Zeile 27-32). Die Entität
|
||||
PasswordManagementKeyword (Zeile 6-14) definiert Password/Salt als einfache
|
||||
Zeichenketten-Properties ohne Verschlüsselungslogik im Setter.
|
||||
Aussage: Das System soll das für einen Zugangsdatensatz eingegebene Passwort verschlüsselt
|
||||
(mit Salt) persistieren und beim Abruf durch berechtigte Benutzer wieder entschlüsseln.
|
||||
Ergebnis: Ein neu angelegter Zugangsdatensatz enthält das tatsächlich eingegebene, verschlüsselt
|
||||
gespeicherte Passwort; beim Abruf wird das ursprüngliche Klartext-Passwort korrekt
|
||||
wiederhergestellt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementKeywordBL.cs, Methode
|
||||
AddNewKeyword(), Zeile 44-52 (Password/Salt werden auf Leerstring gesetzt, Parameter
|
||||
`password` bleibt ungenutzt) - Begründung: durchsetzende Stelle, konkreter Code ohne
|
||||
Verschlüsselungsaufruf.
|
||||
- [PRIMÄR] src/backend/Centron.BL/PasswordManagementArea/PasswordManagementKeywordBL.cs, Methode
|
||||
GetDecryptedKeywordById(), Zeile 21-36 (Kommentar „// decryption" ohne Implementierung)
|
||||
- Begründung: zeigt, dass an der vorgesehenen Stelle keine Entschlüsselung stattfindet.
|
||||
Prüfidee: Neuen Zugangsdatensatz mit Passwort "Test123!" anlegen, anschließend über
|
||||
GetDecryptedKeywordById() abrufen -> erwartet wird "Test123!", tatsächlich beobachtetes
|
||||
Verhalten im gesichteten Code wäre ein Leerstring.
|
||||
Tracelinks: StRS-51
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen (fachliche Anforderung an sich), aber mit dringendem Klärungsbedarf:
|
||||
ob die tatsächliche Verschlüsselung an anderer, hier nicht gesichteter Stelle erfolgt
|
||||
(z. B. über eine NHibernate-Interceptor-/UserType-Konfiguration außerhalb des gezeigten
|
||||
BL-Codes, oder über eine seit dem gesichteten Codestand geänderte Implementierung),
|
||||
konnte im Rahmen dieser statischen Analyse nicht abschließend geklärt werden. Sollte
|
||||
sich die Beobachtung (Passwort wird nicht persistiert/entschlüsselt) bestätigen, handelt
|
||||
es sich um einen kritischen Sicherheitsmangel, der vor jeder Migration zu beheben ist.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Modul: Sales / Administration (Nummernvergabe)
|
||||
|
||||
```
|
||||
ID: SwRS-6
|
||||
Titel: Optimistic-Concurrency-Schutz bei der Zählerfortschreibung eines Nummernkreises
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente NumberGroupBL
|
||||
Vorbedingung: Mehrere Benutzer/Prozesse fordern nahezu gleichzeitig eine neue Nummer aus demselben
|
||||
Nummernkreis an.
|
||||
Fakt: Die Aktualisierung des Zählerstands erfolgt über
|
||||
`Session.GetSession().Query<NumberGroup>().Where(f => f.I3D == numberGroupObject.I3D &&
|
||||
f.Current == numberGroupObject.Current).UpdateBuilder().Set(s => s.Current,
|
||||
nextNumber).Update()`; nur wenn genau eine Zeile betroffen ist (rowCountChanged == 1),
|
||||
gilt die Nummer als erfolgreich reserviert, andernfalls wird die gesamte Ermittlung in
|
||||
der umschließenden while(true)-Schleife (Zeile 67) wiederholt (inkl. `Refresh()` des
|
||||
Objekts).
|
||||
Aussage: Das System soll die Fortschreibung eines Nummernkreiszählers so umsetzen, dass bei
|
||||
gleichzeitigem Zugriff mehrerer Prozesse nur genau einer die jeweilige Nummer erhält und
|
||||
alle anderen automatisch eine neue, noch freie Nummer ermitteln, ohne dass eine
|
||||
Nummer doppelt vergeben wird.
|
||||
Ergebnis: Unter Nebenläufigkeit bleibt die Nummernvergabe eindeutig; kein Prozess erhält eine
|
||||
bereits vergebene Nummer.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs, Zeile 62-89 -
|
||||
Begründung: konkrete, bedingte Update-Anweisung mit Erfolgsprüfung über die betroffene
|
||||
Zeilenzahl ist der durchsetzende Mechanismus.
|
||||
Prüfidee: Lasttest mit z. B. 50 parallelen Anfragen nach einer neuen Rechnungsnummer -> exakt 50
|
||||
unterschiedliche, lückenlos aufeinanderfolgende Nummern werden vergeben, keine
|
||||
Dopplungen.
|
||||
Tracelinks: StRS-61
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - der Optimistic-Concurrency-Mechanismus ist eine solide, im
|
||||
Zielsystem fortzuführende Lösung; bei sehr hoher Parallelität (SaaS-Mehrmandantenbetrieb)
|
||||
ist die Skalierbarkeit der Retry-Schleife zu prüfen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Modul: Sales
|
||||
|
||||
```
|
||||
ID: SwRS-7
|
||||
Titel: Erlaubte Belegweiterverarbeitungsketten je Belegart
|
||||
Ebene: SwRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Komponente ReceiptBL
|
||||
Vorbedingung: Ein Beleg (z. B. Angebot) soll in einen Folgebeleg (z. B. Auftrag) weiterverarbeitet
|
||||
(forward) werden.
|
||||
Fakt: ReceiptBL.ForwardReceipt() ermittelt über eine belegartspezifische Logik
|
||||
(`_specificLogics.Execute(receiptToForward.ReceiptKind, f => f.CanBeForwardedInto())`),
|
||||
in welche Zielbelegarten ein Ausgangsbeleg weiterverarbeitet werden darf, und bricht ab
|
||||
(Zeile 2467-2469), wenn die gewünschte Zielart nicht in dieser erlaubten Menge enthalten
|
||||
ist. Bereits weiterverarbeitete Belege werden zusätzlich über GetReceiptForwardedInto()
|
||||
für nachgelagerte Sperren (z. B. Stornierung, siehe StRS-62) abgefragt.
|
||||
Aussage: Das System soll für jede Belegart zentral definieren, in welche Folgebelegarten sie
|
||||
weiterverarbeitet werden darf, und eine Weiterverarbeitung in eine nicht vorgesehene
|
||||
Zielart unterbinden.
|
||||
Ergebnis: Belege durchlaufen ausschließlich die für ihre Belegart vorgesehene
|
||||
Weiterverarbeitungskette (z. B. Angebot -> Auftrag -> Lieferschein -> Rechnung).
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/Receipts/ReceiptBL.cs, Methode ForwardReceipt(),
|
||||
Zeile 2467-2469 - Begründung: durchsetzende Prüfung der erlaubten Zielbelegarten vor der
|
||||
eigentlichen Weiterverarbeitung.
|
||||
Prüfidee: Versuch, ein Angebot direkt in eine Gutschrift weiterzuverarbeiten (falls nicht in
|
||||
CanBeForwardedInto() vorgesehen) -> Ablehnung; Angebot in Auftrag weiterverarbeiten
|
||||
(vorgesehener Pfad) -> erfolgreich.
|
||||
Tracelinks: StRS-62
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - eine zentral definierte, belegartspezifische Weiterverarbeitungskette
|
||||
ist ein sauberes, übertragbares Muster für die Web-Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
# System Requirements Specification (SyRS)
|
||||
|
||||
c-entron ERP-Suite — Reverse Requirements Engineering, Iteration 02.
|
||||
Systemsicht: Systemverhalten, Schnittstellen, Performance-, Sicherheitsanforderungen.
|
||||
|
||||
## Modul: Accounting
|
||||
|
||||
```
|
||||
ID: SyRS-1
|
||||
Titel: Serverseitige Rechteprüfung vor Persistierung einer Bankverbindung
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (BankAccountBL)
|
||||
Vorbedingung: Ein Benutzer ist angemeldet (LoggedInUser) und ruft SaveBankAccount auf.
|
||||
Fakt: SaveBankAccount() unterscheidet zwischen Neuanlage (I3D == 0) und Änderung (I3D > 0)
|
||||
und prüft für jeden Fall das jeweils passende Recht, bevor der DAO-Aufruf SaveOrUpdate
|
||||
erfolgt; bei fehlendem Recht wird Result<int>.AsError mit DefaultMessageCodes.RightCheckFailed
|
||||
zurückgegeben, ohne dass die Datenbankänderung ausgeführt wird.
|
||||
Aussage: Das System soll jede Anlage oder Änderung einer Bankverbindung serverseitig - unabhängig
|
||||
vom aufrufenden Client (WPF oder Web) - gegen die hinterlegten Benutzerrechte prüfen und
|
||||
bei fehlendem Recht die Persistierung unterbinden.
|
||||
Ergebnis: Persistierung erfolgt ausschließlich bei positivem Rechtecheck; andernfalls definierter
|
||||
Fehlercode ohne Seiteneffekt auf die Datenbank.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Accounting/BankAccountBL.cs, Methode SaveBankAccount(), Zeile 67-100
|
||||
- Begründung: Reihenfolge Rechtecheck vor SaveOrUpdate ist im Code erzwungen (early return).
|
||||
Prüfidee: Unit-/Integrationstest: Aufruf mit Benutzer ohne Recht -> kein Datenbankschreibzugriff
|
||||
(mittels Mock/Spy auf Session.GetGenericDAO<BankAccount>().SaveOrUpdate).
|
||||
Tracelinks: StRS-1, SwRS-1
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - serverseitige Rechteprüfung vor Schreibzugriff ist Grundschutzprinzip, unabhängig vom Zielsystem.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Modul: Plattformübergreifend (Modulregistrierung)
|
||||
|
||||
```
|
||||
ID: SyRS-2
|
||||
Titel: Einheitliche Modul-Plugin-Architektur mit deklarierter Verbindungsart und Kategorie
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Anwendungsstart, Modul-Laden)
|
||||
Vorbedingung: Die WPF-Anwendung startet und muss die verfügbaren Fachmodule (z. B. PLM, RMA, Survey)
|
||||
dynamisch einbinden.
|
||||
Fakt: Jedes UI-Fachmodul implementiert das Interface ICentronAppModuleController mit
|
||||
einheitlichen Metadaten (ID als GUID, ModuleName, Description, Icons, MainCategory als
|
||||
CentronModuleCategory sowie SupportsConnectionTypes, z. B.
|
||||
CentronWebServices/SqlServer) und einer Fabrikmethode CreateModuleInstance(); PLM
|
||||
deklariert sich zusätzlich über IOnlyOpenOnceModule als nur einfach gleichzeitig
|
||||
öffenbar.
|
||||
Aussage: Das System soll Fachmodule über eine einheitliche Plugin-Schnittstelle registrieren, die
|
||||
Metadaten (Kategorie, unterstützte Verbindungsart, Einmalöffnungs-Beschränkung) deklarativ
|
||||
statt hartkodiert im Rahmenwerk bereitstellt.
|
||||
Ergebnis: Neue Fachmodule lassen sich ohne Änderung am Anwendungsrahmen einbinden, sofern sie das
|
||||
Interface korrekt implementieren.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/PLM/PlmAppModuleController.cs, Zeile 13-37 -
|
||||
Begründung: vollständige, durchgesetzte Interface-Implementierung mit konkreten
|
||||
Metadaten als Beispielinstanz des Musters.
|
||||
Prüfidee: Neues Modul mit ICentronAppModuleController registrieren -> erscheint automatisch in
|
||||
der Modulübersicht (siehe StRS-42) mit korrektem Icon und korrekter Kategorie.
|
||||
Tracelinks: StRS-42
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - eine deklarative Modul-Plugin-Architektur ist ein gutes,
|
||||
übertragbares Architekturmuster für eine modular aufgebaute Web-Anwendung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
# Traceability-Tabelle
|
||||
|
||||
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg |
|
||||
|---|---|---|---|
|
||||
| StRS-1 | SyRS-1 | SwRS-1, SwRS-2 | src/backend/Centron.BL/Accounting/BankAccountBL.cs |
|
||||
| StRS-2 | - | SwRS-3 | src/backend/Centron.BL/Accounts/AccountBL.cs |
|
||||
| StRS-3 | - | - | src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs |
|
||||
| StRS-4 | - | - | src/backend/Centron.BL/AppointmentRequests/AppointmentRequestBL.cs |
|
||||
| StRS-5 | - | - | src/backend/Centron.Entities/Entities/BranchArea/Branch.cs |
|
||||
| StRS-6 | - | - | src/backend/Centron.BL/BusinessPartner/SearchSupplierBL.cs, SupplierAssetBL.cs |
|
||||
| StRS-7 | - | - | src/backend/Centron.BL/Buying/External/DistributorBL.cs |
|
||||
| StRS-8 | - | - | src/backend/Centron.BL/CentronIcons/CentronIconsBL.cs, CentronIconsWebserviceBL.cs |
|
||||
| StRS-9 | - | - | src/backend/Centron.Entities/Entities/ChangeTracking/ChangeLog.cs |
|
||||
| StRS-10 | - | - | src/backend/Centron.Entities/Entities/Chats/Chat.cs |
|
||||
| StRS-11 | - | - | src/backend/Centron.BL/CheckListArea/* |
|
||||
| StRS-12 | - | - | src/backend/Centron.Entities/Entities/Constants/CentronConstant.cs |
|
||||
| StRS-13 | - | - | src/backend/Centron.BL/CustomerArea/RmaBL.cs |
|
||||
| StRS-14 | - | - | src/backend/Centron.BL/Customizations/CustomTables/CustomTableBL.cs |
|
||||
| StRS-15 | - | SwRS-4 | src/backend/Centron.BL/DataExchange/EDI/SaleInvoices/InvoiceZugferdBL.cs |
|
||||
| StRS-16 | - | - | src/backend/Centron.DAO/TemporaryEntities/RechKopf.cs |
|
||||
| StRS-17 | - | - | src/backend/Centron.BL/Devices/AccountDeviceBL.cs |
|
||||
| StRS-18 | - | - | src/backend/Centron.Entities/Entities/DocuBoard/AssetManagementPartner.cs |
|
||||
| StRS-19 | - | - | src/backend/Centron.Entities/Entities/DocumentationArea/*.cs |
|
||||
| StRS-20 | - | - | src/backend/Centron.BL/EDI/**/*.cs |
|
||||
| StRS-21 | - | - | src/backend/Centron.BL/EmployeeArea/AppUserBL.cs |
|
||||
| StRS-22 | - | - | src/backend/Centron.Entities/Entities/Environments/**/*.cs |
|
||||
| StRS-23 | - | - | src/backend/Centron.Entities/Entities/ExpectedEvents/ExpectedEvents.cs |
|
||||
| StRS-24 | - | - | src/backend/Centron.BL/ExternalHelpdesk/ExternalHelpdeskConfigurationBL.cs |
|
||||
| StRS-25 | - | - | src/backend/Centron.BL/ExternalToolsBL/ExternalToolBL.cs |
|
||||
| StRS-26 | - | - | src/backend/Centron.BL/Finances/IncomingPayments/IncomingPaymentBL.cs |
|
||||
| StRS-27 | - | - | src/backend/Centron.BL/GUI/UserGridBL.cs, Profiles/UiProfileBL.cs |
|
||||
| StRS-28 | - | - | src/backend/Centron.BL/Gateway/CustomGatewayBL.cs |
|
||||
| StRS-29 | - | - | src/backend/Centron.Entities/Entities/HolidayArea/PublicHoliday.cs |
|
||||
| StRS-30 | - | - | src/backend/Centron.Entities/Entities/ImageFactory/WebsuiteImages/*.cs |
|
||||
| StRS-31 | - | - | src/backend/Centron.BL/GUI/Import/Asset/ImportOrderBL.cs |
|
||||
| StRS-32 | - | - | src/backend/Centron.Entities/Entities/Integrations/EsRole.cs |
|
||||
| StRS-33 | - | - | src/backend/Centron.BL/ItPlanner/ChecklistVirtualObjectCategoryBL.cs |
|
||||
| StRS-34 | - | - | src/backend/Centron.BL/Logistics/**/*.cs |
|
||||
| StRS-35 | - | - | src/backend/Centron.Entities/Entities/Logos/Logo.cs |
|
||||
| StRS-36 | - | - | src/backend/Centron.BL/Mail/Blacklist/DomainBlacklistBL.cs |
|
||||
| StRS-37 | - | - | src/backend/Centron.BL/MailScanner/MailScannerBL.cs |
|
||||
| StRS-38 | - | - | src/backend/Centron.BL/Mailings/MailingDataBL.cs |
|
||||
| StRS-39 | - | - | src/backend/Centron.BL/MassUpdate/MassUpdateBL.cs |
|
||||
| StRS-40 | - | - | src/backend/Centron.Entities/Entities/Merchandise/**/*.cs |
|
||||
| StRS-41 | - | - | src/backend/Centron.Entities/Entities/Mobile/*.cs |
|
||||
| StRS-42 | - | - | src/backend/Centron.BL/Modules/ModuleBL.cs |
|
||||
| StRS-43 | - | - | src/backend/Centron.BL/MyCentron/**/*.cs |
|
||||
| StRS-44 | - | - | src/backend/Centron.BL/MyDay/MyDayBL.cs |
|
||||
| StRS-45 | - | - | src/backend/Centron.BL/NexusNotifications/*.cs |
|
||||
| StRS-46 | - | - | src/backend/Centron.BL/NexusTicketViews/NexusTicketViewBL.cs |
|
||||
| StRS-47 | - | - | src/backend/Centron.Entities/Entities/Notifications/CentronNotification.cs |
|
||||
| StRS-48 | - | - | src/backend/Centron.Entities/Entities/ObjectExternalReferences/ObjectExternalReference.cs |
|
||||
| StRS-49 | - | - | src/backend/Centron.Entities/Entities/ObjectTypes/ObjectType.cs |
|
||||
| StRS-50 | - | - | src/backend/Centron.Entities/Entities/Outlook/AssetKindResultEntity.cs |
|
||||
| StRS-51 | - | SwRS-5 | src/backend/Centron.BL/PasswordManagementArea/PasswordManagementKeywordBL.cs |
|
||||
| StRS-52 | - | - | src/backend/Centron.BL/PasswordManager/PasswordManagerBL.cs |
|
||||
| StRS-53 | - | - | src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs |
|
||||
| StRS-54 | - | - | src/backend/Centron.Entities/Entities/ProductMatrix/*.cs |
|
||||
| StRS-55 | - | - | src/backend/Centron.BL/Production/ProductionOrderBL.cs |
|
||||
| StRS-56 | - | - | src/backend/Centron.Entities/Entities/ProjectArea/*.cs |
|
||||
| StRS-57 | - | - | src/backend/Centron.BL/Purchasing/OrderSuggestionList/OrderSuggestionListBL.cs |
|
||||
| StRS-58 | - | - | src/backend/Centron.Entities/Entities/RelationshipArea/Relationships.cs |
|
||||
| StRS-59 | - | - | src/backend/Centron.BL/ReportEngine/PdfStategy/*.cs |
|
||||
| StRS-60 | - | - | src/backend/Centron.BL/Reporting/ReportsBL.cs |
|
||||
| StRS-61 | - | SwRS-6 | src/backend/Centron.BL/Administration/Company/NumberGroupBL.cs |
|
||||
| StRS-62 | - | SwRS-7 | src/backend/Centron.BL/Sales/Receipts/Invoices/ReceiptInvoiceBL.cs, ReceiptBL.cs |
|
||||
| StRS-63 | - | - | src/backend/Centron.Entities/Entities/ScheduleArea/ScheduleRemainingLeave.cs |
|
||||
| StRS-64 | - | - | src/backend/Centron.Entities/Entities/SelfCare/*.cs |
|
||||
| StRS-65 | - | - | src/backend/Centron.Entities/Entities/Services/Workflows/WorkflowProcess.cs |
|
||||
| StRS-66 | - | - | src/backend/Centron.BL/SocialMedia/*.cs |
|
||||
| StRS-67 | - | - | src/backend/Centron.Entities/Entities/States/FederalState.cs |
|
||||
| StRS-68 | - | - | src/backend/Centron.BL/Statistics/**/*.cs |
|
||||
| StRS-69 | - | - | src/backend/Centron.BL/Storage/StorageBL.cs |
|
||||
| StRS-70 | - | - | src/backend/Centron.Entities/Entities/SystemArea/SystemTableI3D.cs |
|
||||
| StRS-71 | - | - | src/backend/Centron.Entities/Entities/Tags/TicketTag.cs |
|
||||
| StRS-72 | - | - | src/backend/Centron.Entities/Entities/Tapi/PhoneCall.cs |
|
||||
| StRS-73 | - | - | src/backend/Centron.BL/TaskManager/ActionHandler/*.cs |
|
||||
| StRS-74 | - | - | src/backend/Centron.BL/Administration/Logins/TicketBL.cs |
|
||||
| StRS-75 | - | - | src/backend/Centron.Entities/Entities/Telemetry/ArtificialIntelligenceToolUsageTelemetry.cs |
|
||||
| StRS-76 | - | - | src/backend/Centron.Entities/Entities/TicketProjects/*.cs |
|
||||
| StRS-77 | - | - | src/backend/Centron.Entities/Entities/Time/TimingSetting.cs |
|
||||
| StRS-78 | - | - | src/backend/Centron.BL/TradePool/Core/TradePoolXmlLogic.cs |
|
||||
| StRS-79 | - | - | src/backend/Centron.Entities/Entities/Transactions/Transaction.cs |
|
||||
| StRS-80 | - | - | src/backend/Centron.Entities/Entities/VoucherManagement/Voucher.cs |
|
||||
| StRS-81 | - | - | src/backend/Centron.BL/Warehousing/TaxBL.cs |
|
||||
| StRS-82 | - | - | src/backend/Centron.Entities/Entities/WebLinks/WebLink.cs |
|
||||
| StRS-83 | - | - | src/backend/Centron.BL/WebSuite/Administration/Settings/*.cs |
|
||||
| StRS-84 | SyRS-2 | - | src/centron/Centron.WPF.UI/Modules/PLM/PlmAppModuleController.cs |
|
||||
| StRS-85 | SyRS-2 | - | src/centron/Centron.WPF.UI/Modules/QM/Settings |
|
||||
| StRS-86 | - | - | src/centron/Centron.WPF.UI/Modules/Rma/NewRma/Pages/*.cs |
|
||||
| StRS-87 | SyRS-2 | - | src/centron/Centron.WPF.UI/Modules/Survey/* |
|
||||
| StRS-88 | - | - | src/centron/Centron.WPF.UI/Modules/TelekomDive/TelekomDiveExportViewModel.cs |
|
||||
| StRS-89 | - | - | src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter/*.cs |
|
||||
| StRS-90 | - | - | src/centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference |
|
||||
| StRS-91 | - | - | src/centron/Centron.WPF.UI/Modules/OnlineBanking/* |
|
||||
| StRS-92 | - | - | src/centron/Centron.WPF.UI/Modules/Dashboard/Modules |
|
||||
| StRS-93 | - | - | src/centron/Centron.WPF.UI/Modules/Global/* |
|
||||
| StRS-94 | - | - | src/centron/Centron.WPF.UI/Modules/Helpdesk/TicketLogicHelper.cs |
|
||||
| StRS-95 | - | - | src/apis/Centron.APIs.CopDataAccess/CopApi.cs |
|
||||
| StRS-96 | - | - | src/apis/Centron.APIs.EgisDataAccess/EgisApi.cs |
|
||||
| StRS-97 | - | - | src/apis/Centron.APIs.FinAPI/FinApiClient.cs |
|
||||
| StRS-98 | - | - | src/apis/Centron.APIs.IcecatDataAccess/*.cs, ITscopeDataAccess/*.cs |
|
||||
| StRS-99 | - | - | src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs |
|
||||
| StRS-100 | - | - | src/apis/Centron.Api.Gls/CentronGlsLogic.cs, Centron.Api.Shipcloud/CentronShipcloudLogic.cs |
|
||||
| StRS-101 | - | - | src/webservice/Centron.Controllers/Authorization/AuthorizeUserRightAttribute.cs |
|
||||
| StRS-102 | - | - | src/webservice/Centron.Controllers/Controllers/Unversioned/JwtAuthController.cs |
|
||||
| StRS-103 | - | - | src/backend/Centron.Interfaces, Centron.Common, Centron.Gateway |
|
||||
| StRS-104 | - | - | src/Centron.Api.docuFORM/Helper/OAuthHelper.cs |
|
||||
| StRS-105 | - | - | src/nexus/CentronNexus.OutlookAddIn |
|
||||
| StRS-106 | - | - | src/shared/Centron.Controls, Centron.Controls.Preview, Centron.Core |
|
||||
| StRS-107 | - | - | assemblies/* |
|
||||
| StRS-108 | - | - | deployment/WixSharpInstaller |
|
||||
| StRS-109 | - | - | docker/* |
|
||||
| StRS-110 | - | - | src/webservice/Centron.WebServices.Core/Connections/Serializer/GzipCompressionSerializer.cs, c-entron.misc.ConnectionManager/* |
|
||||
| StRS-111 | - | - | src/backend/Centron.Entities/Entities/ToDoArea/ToDo.cs |
|
||||
| StRS-112 | - | - | src/backend/Centron.Entities/Entities/TextModuleArea/TextModule.cs |
|
||||
| StRS-113 | - | - | src/backend/Centron.Entities/Entities/Urls/SimpleUrl.cs |
|
||||
| StRS-114 | - | - | src/backend/Centron.Entities/Entities/VideoPortal/VideoPortalAssignment.cs |
|
||||
+201
@@ -0,0 +1,201 @@
|
||||
# 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-26T09:43:13.5984977+02:00
|
||||
- **Endzeit:** 2026-08-26T10:41:38.9092472+02:00
|
||||
- **Dauer gesamt:** 0:58:25 (`duration_ms` 0:58:23; API: 0:57:18)
|
||||
— **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:** 4.2.1
|
||||
- **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-sonnet-5`
|
||||
- **Modelle (tatsächlich eingesetzt):** `claude-sonnet-5` 53.391.713 Tokens (99.99 %), `claude-haiku-4-5-20251001` 6.967 Tokens (0.01 %)
|
||||
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
|
||||
- **Effort:** `high` (per `--effort high` gesetzt)
|
||||
- **Laufverzeichnis-ID:** `v4.2.1-4840`
|
||||
- **Ablage:** `Iteration 2/claude-sonnet-5/solo/high/`
|
||||
- **Parallele Läufe:** **ja** – zeitgleich liefen:
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-3983`
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-f631`
|
||||
- `02_Lauf_2026-08-26_094250_v4.2.1-c69e`
|
||||
|
||||
Die Zeitangaben dieses Laufs sind daher **nicht** für Laufzeitvergleiche zu verwenden.
|
||||
Tokenverbrauch, Anforderungszahl und Denials bleiben unverzerrt.
|
||||
- **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 | 438 |
|
||||
| Output-Tokens | 247.882 (davon 49.547 Thinking-Tokens) |
|
||||
| Cache-Write-Tokens | 410.504 |
|
||||
| Cache-Read-Tokens | 52.732.889 |
|
||||
| Agent-Turns | 305 |
|
||||
|
||||
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
|
||||
| Messgröße | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|
||||
|---|---:|---:|---:|
|
||||
| Input-Tokens | 438 | 6.943 | 7.381 |
|
||||
| Output-Tokens | 247.882 | 24 | 247.906 |
|
||||
| Cache-Write-Tokens | 410.504 | 0 | 410.504 |
|
||||
| Cache-Read-Tokens | 52.732.889 | 0 | 52.732.889 |
|
||||
| **Tokens gesamt** | **53.391.713** | **6.967** | **53.398.680** |
|
||||
|
||||
**Tokens gesamt: 53.398.680** — 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 | 114 | 92,7 % |
|
||||
| SyRS | 2 | 1,6 % |
|
||||
| SwRS | 7 | 5,7 % |
|
||||
| **Gesamt** | **123** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 85 | 69,1 % |
|
||||
| Schnittstelle | 17 | 13,8 % |
|
||||
| nicht-funktional | 12 | 9,8 % |
|
||||
| Sicherheit | 9 | 7,3 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 137 |
|
||||
| davon `PRIMÄR` | 75 (54,7 %) |
|
||||
| davon `SEKUNDÄR` | 33 (24,1 %) |
|
||||
| davon `KONTEXT` | 29 (21,2 %) |
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 69 (56,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 106 | 86,2 % |
|
||||
| workaround | 3 | 2,4 % |
|
||||
| sonderfall | 9 | 7,3 % |
|
||||
| veraltet | 5 | 4,1 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 118 | 95,9 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 5 | 4,1 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 32 | 26,0 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 13 | 10,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]` | **verletzt** – 1 von 17 ungedeckt: StRS-106 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 123 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 70 von 123 mit Tracelinks (56,9 %) |
|
||||
|
||||
## Ergebnis
|
||||
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
|
||||
- **Session-ID:** `84e54dee-b9ff-49a5-add8-570c7aff612e`
|
||||
- **Permission-Denials:** 0 – **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` | 36.318 B |
|
||||
| `Glossar.md` | 2.654 B |
|
||||
| `Hypothesen.md` | 2.133 B |
|
||||
| `StRS.md` | 212.268 B |
|
||||
| `SwRS.md` | 16.619 B |
|
||||
| `SyRS.md` | 4.065 B |
|
||||
| `Traceability.md` | 9.421 B |
|
||||
|
||||
- **Root unverändert:** ja (zeilenendennormalisiert verglichen).
|
||||
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
**1. Der Lauf liegt auf der Grenze zweier Untersuchungsgegenstände – und ist eindeutig zugeordnet.**
|
||||
Er startete um 09:43:13 ohne `SSMS_DB_SCHEMA.sql` und lief noch, als die Datei um 10:28:08 im
|
||||
Arbeitsverzeichnis erschien (Ende: 10:41:38). Die Zuordnung wurde am Session-Transkript
|
||||
entschieden: **null Treffer** für `SSMS_DB_SCHEMA`, `CentronVOED2` und `.sql` in 2,88 MB. Der Lauf
|
||||
hat die Datei nie berührt und gehört zweifelsfrei zu **Iteration 2**.
|
||||
|
||||
**2. Der Vorher/Nachher-Vergleich trägt diese Aussage hier nicht.** `before.txt` (09:43) und
|
||||
`after.txt` sind beide leer – aber aus verschiedenen Gründen: vorher, weil die Datei noch nicht
|
||||
existierte; nachher, weil sie inzwischen committet ist und nicht mehr als `??` erscheint. Zwei
|
||||
gleiche Messwerte bei ungleichen Zuständen. Die belastbare Aussage kommt aus dem Transkript, nicht
|
||||
aus dem Statusvergleich. Für künftige Läufe ist das ein Grund, den Snapshot-Zustand zusätzlich
|
||||
über einen Inhaltshash zu führen statt nur über den Git-Status.
|
||||
|
||||
**3. Teuerster und unergiebigster Lauf beider Iterationen.** 53,4 Mio. Tokens und 305 Turns für
|
||||
123 Anforderungen – zum Vergleich `c69e` in derselben Zelle: 13,0 Mio. Tokens für 160
|
||||
Anforderungen. Faktor 4,1 beim Verbrauch, bei 23 % weniger Ertrag.
|
||||
|
||||
**4. Extremste Ebenenverteilung der gesamten Reihe: 92,7 % StRS** (114 von 123; SyRS 2, SwRS 7).
|
||||
Die Mindestabdeckung aus Schritt 0b ist fast vollständig auf die Stakeholder-Ebene gerutscht. Da
|
||||
der Prompt die Ebene der Mindestabdeckung nicht vorschreibt, ist das formal regelkonform – als
|
||||
Spezifikation für eine Neuimplementierung aber kaum brauchbar: Die System- und Softwareebene, die
|
||||
das *Wie* tragen, bleiben praktisch leer.
|
||||
|
||||
**5. Schwächste Traceability beider Iterationen: 56,9 %** (70 von 123). Unter Prompt-Version 01
|
||||
waren Tracelinks in **allen** 3.287 Anforderungen gesetzt. Zusammen mit der Ebenenverteilung passt
|
||||
das ins Bild: Ohne SyRS- und SwRS-Ebene gibt es kaum Ziele, auf die verlinkt werden könnte.
|
||||
|
||||
**6. Belegqualität im unteren Mittelfeld:** 56,1 % der Anforderungen mit Primärbeleg, und mit
|
||||
21,2 % der höchste `KONTEXT`-Anteil beider Iterationen (Rest: 0,5–9,1 %). Ein Risikoverstoß
|
||||
(StRS-106). 0 Permission-Denials, genau die sieben geforderten Dateien.
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"is_error":false,"duration_api_ms":3438884,"num_turns":305,"stop_reason":"end_turn","session_id":"84e54dee-b9ff-49a5-add8-570c7aff612e","total_cost_usd":14.675352799999999,"usage":{"input_tokens":438,"cache_creation_input_tokens":410504,"cache_read_input_tokens":52732889,"output_tokens":247882,"output_tokens_details":{"thinking_tokens":49547},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":410504,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":787,"cache_read_input_tokens":436282,"cache_creation_input_tokens":2034,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":2034},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6943,"outputTokens":24,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007063000000000001,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-sonnet-5":{"inputTokens":438,"outputTokens":247882,"cacheReadInputTokens":52732889,"cacheCreationInputTokens":410504,"webSearchRequests":0,"costUSD":14.668289799999998,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-sonnet-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"completed","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":null,"result":"Formatting held up correctly throughout. The deliverable is complete. Let me provide a final summary.\n\n## Zusammenfassung\n\nDie Anforderungsspezifikation für die c-entron ERP-Suite ist fertiggestellt und liegt in `Ergebnisse/` vor:\n\n- **Modulinventar (Schritt 0):** 119 Module/Komponenten erfasst, bevor die erste Anforderung geschrieben wurde — 85 datenmodellbasierte Kernmodule, 11 UI-Fachmodule, 8 externe Integrationen, 15 technische Infrastrukturkomponenten.\n- **Mindestabdeckung:** Alle 119 Module tragen mindestens eine belegte Anforderung; kein Modul ist „nicht analysiert\". Ein abschließender automatisierter Abgleich deckte 4 zunächst übersehene Module auf (ToDoArea, TextModuleArea, Urls, VideoPortal), die noch im selben Lauf nachgetragen wurden.\n- **123 Anforderungen** (114 StRS, 2 SyRS, 7 SwRS) mit vollständiger Traceability, davon 7 Module „tief\" vertieft entlang der Risikovorgabe (Sicherheit, Fakturierung, Berechtigungen): Accounting, Accounts, Administration, DataExchange, PasswordManagementArea, Sales, Ticketing.\n- **Wichtigster Einzelbefund:** In `PasswordManagementKeywordBL` wird das übergebene Klartext-Passwort nachweislich nie gespeichert (Password/Salt werden hart auf leer gesetzt) und die als „// decryption\" kommentierte Methode entschlüsselt nichts — ein kritischer, primär belegter Verdachtsfall vor jeder Migration.\n- **Konsistenzcheck:** keine doppelten IDs, keine unbelegten Anforderungen, keine toten Tracelinks, 5 Hypothesen exakt deckungsgleich zwischen Inline-Markierung und `Hypothesen.md`, 32 Konsolidierungskandidaten markiert.\n\nAlle Prüfungen sind automatisiert nachvollzogen (grep/awk-Abgleiche), nicht nur behauptet.","ttft_ms":4509,"ttft_stream_ms":2073,"time_to_request_ms":25,"type":"result","duration_ms":3503694,"uuid":"962ad719-5736-419a-8eee-e0a7fe5f4cdf","queued_turn_count":0}
|
||||
+2353
File diff suppressed because it is too large
Load Diff
+64
@@ -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 | 114 | 92,7 % |
|
||||
| SyRS | 2 | 1,6 % |
|
||||
| SwRS | 7 | 5,7 % |
|
||||
| **Gesamt** | **123** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 85 | 69,1 % |
|
||||
| Schnittstelle | 17 | 13,8 % |
|
||||
| nicht-funktional | 12 | 9,8 % |
|
||||
| Sicherheit | 9 | 7,3 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 137 |
|
||||
| davon `PRIMÄR` | 75 (54,7 %) |
|
||||
| davon `SEKUNDÄR` | 33 (24,1 %) |
|
||||
| davon `KONTEXT` | 29 (21,2 %) |
|
||||
| Belege je Anforderung (Median) | 1 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 69 (56,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 106 | 86,2 % |
|
||||
| workaround | 3 | 2,4 % |
|
||||
| sonderfall | 9 | 7,3 % |
|
||||
| veraltet | 5 | 4,1 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 118 | 95,9 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 5 | 4,1 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 32 | 26,0 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 13 | 10,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]` | **verletzt** – 1 von 17 ungedeckt: StRS-106 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 123 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 70 von 123 mit Tracelinks (56,9 %) |
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+177
@@ -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\Tag 2\claude-sonnet-5\solo\high\02_Lauf_2026-08-26_094249_v4.2.1-4840\Ergebnisse\`.
|
||||
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T10:41:38.9092472+02:00
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T09:43:13.5984977+02:00
|
||||
+314
@@ -0,0 +1,314 @@
|
||||
# Analysebericht - c-entron ERP-Suite (Reverse Requirements Engineering)
|
||||
|
||||
Iteration 02, Lauf 02_Lauf_2026-08-26_094249. Dieses Dokument enthält das Modulinventar (Schritt 0),
|
||||
die Abdeckungstabelle, den Konsistenzcheck und die Selbstbewertung, in dieser Reihenfolge.
|
||||
|
||||
## Abgrenzung des Modulbegriffs
|
||||
|
||||
Die Codebasis ist auf zwei Ebenen strukturiert, die sich weitgehend spiegeln:
|
||||
|
||||
- **Fachliche Module** unter `src/centron/Centron.WPF.UI/Modules/*` (Client-Anwendung, 29 Top-Level-Ordner).
|
||||
Diese bilden die Menüstruktur der Desktop-Anwendung ab und sind die primäre Inventareinheit.
|
||||
- **Technische/Querschnitts-Komponenten**: Backend-Schichten (`Centron.BL`, `Centron.DAO`,
|
||||
`Centron.Entities`, `Centron.Gateway`, `Centron.Interfaces`, `Centron.Common`), das Web-Portal
|
||||
`CentronNexus` samt Host und Outlook-Addin, die Webservice-Schicht, externe API-Anbindungen,
|
||||
gemeinsame UI-Bibliotheken sowie Deployment-/Infrastrukturartefakte. Diese sind nicht 1:1 einem
|
||||
UI-Modul zugeordnet, tragen aber eigenständige fachliche bzw. sicherheitsrelevante Logik (z. B.
|
||||
`Centron.BL/Security`, `Centron.DAO/NHibernateConfiguration`) und werden daher als eigene
|
||||
Inventarzeilen geführt.
|
||||
|
||||
Die 29 fachlichen Module spiegeln sich zu großen Teilen in gleichnamigen Unterordnern von
|
||||
`Centron.BL` (z. B. `BL/Sales`, `BL/Purchasing`, `BL/Warehousing`) - Belege für ein Modul stammen
|
||||
daher typischerweise sowohl aus der UI- als auch aus der BL/DAO-Schicht.
|
||||
|
||||
## Modulinventar (Schritt 0)
|
||||
|
||||
| # | Modul/Komponente | Pfad | Fachliche Aufgabe |
|
||||
|---|---|---|---|
|
||||
| 1 | Administration | `src/centron/Centron.WPF.UI/Modules/Administration` | Systemweite Konfiguration: Mandanten, Rechte, Mitarbeiter, Mail-/Telefonanbindung, DSGVO-Einstellungen, Report-Server. |
|
||||
| 2 | ArtificialIntelligence | `.../Modules/ArtificialIntelligence` | KI-gestützte Textbewertung, Chat und OpenAI-Anbindung zur Unterstützung bei Angeboten/Texten. |
|
||||
| 3 | Calendar | `.../Modules/Calendar` | Termin-/Kalenderverwaltung inkl. Einstellungen. |
|
||||
| 4 | Dashboard | `.../Modules/Dashboard` | Konfigurierbare Startseiten-Kacheln/Widgets. |
|
||||
| 5 | DataExchange | `.../Modules/DataExchange` | Import/Export, DATEV-Anbindung, Zahlungsverkehr, Dokumentensynchronisation, RMM-Anbindung. |
|
||||
| 6 | ExternalTool | `.../Modules/ExternalTool` | Einbindung externer Werkzeuge über konfigurierbare Variablen. |
|
||||
| 7 | Finances | `.../Modules/Finances` | Fakturierung (Automated/Flatrate/Timer-Billing), Verträge, Zahlungen, Mahnwesen, CRM, offene Posten. |
|
||||
| 8 | Global | `.../Modules/Global` | Modulübergreifende Dialoge/Helfer: Dateisystem, Hilfe, Aktionen, Diagnose, Custom Properties. |
|
||||
| 9 | Gui | `.../Modules/Gui` | Benutzerprofile für die Oberfläche. |
|
||||
| 10 | Helpdesk | `.../Modules/Helpdesk` | Ticket-/Vorgangsverwaltung, Checklisten, erwartete Ereignisse, Aufgabenmanagement. |
|
||||
| 11 | Logistic | `.../Modules/Logistic` | Versandmethoden und Logistikeinstellungen. |
|
||||
| 12 | Massenupdates | `.../Modules/Massenupdates` | Massenhafte Datenänderungen über Events/Updates. |
|
||||
| 13 | MyCentron | `.../Modules/MyCentron` | Persönlicher Arbeitsbereich: Kalender, Aufgaben, Telefonie, Supremo-Fernwartung. |
|
||||
| 14 | OnlineBanking | `.../Modules/OnlineBanking` | Kontotransaktionen, Bankverbindungen, Konfiguration des Online-Banking-Zugangs. |
|
||||
| 15 | PLM | `.../Modules/PLM` | Product Lifecycle Management. |
|
||||
| 16 | PasswordManager | `.../Modules/PasswordManager` | Verwaltung von Zugangsdaten/Passwörtern. |
|
||||
| 17 | PayersAndCostCenter | `.../Modules/PayersAndCostCenter` | Zahler- und Kostenstellenverwaltung. |
|
||||
| 18 | Production | `.../Modules/Production` | Maschinenverwaltung und Produktionsaufträge. |
|
||||
| 19 | ProjectManagement | `.../Modules/ProjectManagement` | Projektverwaltung. |
|
||||
| 20 | ProjectPriceImport | `.../Modules/ProjectPriceImport` | Import von Projektpreisen inkl. Preisdifferenzprüfung. |
|
||||
| 21 | Purchasing | `.../Modules/Purchasing` | Einkauf: EDI, Bestellvorschläge, Reisekosten. |
|
||||
| 22 | QM | `.../Modules/QM` | Qualitätsmanagement-Einstellungen. |
|
||||
| 23 | Reports | `.../Modules/Reports` | Berichtsverwaltung. |
|
||||
| 24 | Rma | `.../Modules/Rma` | Retourenabwicklung (Return Merchandise Authorization), Versand hin/zurück. |
|
||||
| 25 | Sales | `.../Modules/Sales` | Vertrieb: Mailing, Produktmatrix, Sonderartikel-Import. |
|
||||
| 26 | Statistics | `.../Modules/Statistics` | Auswertungen: Mitarbeiter-, Verkaufs-, MSP-Statistiken. |
|
||||
| 27 | Survey | `.../Modules/Survey` | Umfragen. |
|
||||
| 28 | TelekomDive | `.../Modules/TelekomDive` | Anbindung an die Telekom-DIVE-Plattform. |
|
||||
| 29 | Warehousing | `.../Modules/Warehousing` | Lager: Artikel-, Material-, Bestandsverwaltung, Kommissionierung, Barcode. |
|
||||
| 30 | Centron.BL (Kern/Security) | `src/backend/Centron.BL` | Zentrale Geschäftslogik-Schicht; u. a. Rechteprüfung (`Security`), Änderungsverfolgung (`ChangeTracking`), 2FA. |
|
||||
| 31 | Centron.DAO | `src/backend/Centron.DAO` | Datenzugriffsschicht (NHibernate), Repositories, benannte Queries, Mappings. |
|
||||
| 32 | Centron.Entities | `src/backend/Centron.Entities` | Domänenmodell/Entitätsklassen, die das relationale Schema abbilden. |
|
||||
| 33 | Centron.Gateway | `src/backend/Centron.Gateway` | Backend-Gateway zwischen Clients und Diensten. |
|
||||
| 34 | Centron.Interfaces | `src/backend/Centron.Interfaces` | Schnittstellenverträge zwischen Schichten. |
|
||||
| 35 | Centron.Common | `src/backend/Centron.Common` | Gemeinsame Backend-Hilfsfunktionen. |
|
||||
| 36 | Centron.Controls / Controls.Preview | `src/shared/Centron.Controls*` | Wiederverwendbare WPF-Steuerelemente. |
|
||||
| 37 | Centron.Core | `src/shared/Centron.Core` | Gemeinsame Basisfunktionalität für Client und Server. |
|
||||
| 38 | Centron.WPF.UI.Extension | `src/centron/Centron.WPF.UI.Extension` | Erweiterungen der WPF-Hauptanwendung. |
|
||||
| 39 | CentronNexus (Webportal) | `src/nexus/CentronNexus` | Web-Kundenportal: Serviceboard, Web-Angebote, Web-Warenkorb, Dokumentensignierung. |
|
||||
| 40 | CentronNexus.Host | `src/nexus/CentronNexus.Host` | Hosting-/Startprojekt für das Nexus-Webportal. |
|
||||
| 41 | CentronNexus.OutlookAddIn | `src/nexus/CentronNexus.OutlookAddIn` | Outlook-Add-in zur Anbindung an Ticket-/CRM-Daten. |
|
||||
| 42 | Centron Webservice-Schicht | `src/webservice/*` | REST/SOAP-Schnittstellen für externe Systeme und Clients (Controllers, Host, WindowsService). |
|
||||
| 43 | c-entron.misc.ConnectionManager | `src/webservice/c-entron.misc.ConnectionManager` | Verbindungsverwaltung für Webservices. |
|
||||
| 44 | Centron.APIs.FinAPI | `src/apis/Centron.APIs.FinAPI` | Anbindung an FinAPI (Bankkontodaten). |
|
||||
| 45 | Produktdaten-Schnittstellen (Cop/Egis/ITscope/Icecat) | `src/apis/Centron.APIs.{Cop,Egis,ITscope,Icecat}DataAccess` | Anbindung an Produktdaten-/Katalogdienste für den Einkauf. |
|
||||
| 46 | Centron.Api.EbInterface | `src/apis/Centron.Api.EbInterface` | Erzeugung elektronischer Rechnungen (ebInterface-Format). |
|
||||
| 47 | Versanddienstleister-APIs (GLS/Shipcloud) | `src/apis/Centron.Api.{Gls,Shipcloud}` | Anbindung an Versanddienstleister. |
|
||||
| 48 | Centron.Api.docuFORM | `Centron.Api.docuFORM` | Dokumentengenerierung (Formulare/PDF) als eigener API-Dienst. |
|
||||
| 49 | Deployment/Installer | `deployment/*` | Installationspakete (WixSharp) für Client/Server-Rollout. |
|
||||
| 50 | Docker/Infrastruktur | `docker/*` | Containerisierte Entwicklungs-/Testumgebung (API, Demo, DB, Mailcatcher). |
|
||||
|
||||
*(Tabelle wird nicht gekürzt; bei Bedarf werden weitere Zeilen ergänzt.)*
|
||||
|
||||
## Abdeckungstabelle (Schritt 0b/0c und Abschluss)
|
||||
|
||||
Einstufung je Modul: **tief** (mehrere Anforderungen über alle drei Ebenen, mit gelesenem
|
||||
Methodenkörper), **mittel** (mehr als eine fachliche Facette abgedeckt, aber nicht vollständig
|
||||
vertieft), **flach** (Mindestabdeckung erfüllt: mindestens ein StRS/SyRS/SwRS-Anforderungstripel
|
||||
mit mindestens einem gelesenen, repräsentativen Artefakt), **nicht analysiert** (kein Requirement
|
||||
möglich). Die Spalte „Anzahl Anforderungen“ zählt eigenständige StRS+SyRS+SwRS-Zeilen, die diesem
|
||||
Modul zugeordnet sind; bei den drei mit „*“ markierten Zeilen ist die Abdeckung mangels eigener
|
||||
Anforderungskette über eine Querverweis-Zeile (gemeinsam mit einer anderen Inventarzeile) erbracht,
|
||||
um Doppelzählung im Gesamtergebnis zu vermeiden (siehe Erläuterung darunter).
|
||||
|
||||
| # | Modul/Komponente | Einstufung | Anzahl Anforderungen |
|
||||
|---|---|---|---|
|
||||
| 1 | Administration | tief | 25 (StRS-001..006, SyRS-001..008, SwRS-001..011) |
|
||||
| 2 | ArtificialIntelligence | flach | 3 (StRS-007, SyRS-009, SwRS-012) |
|
||||
| 3 | Calendar | flach | 3 (StRS-008, SyRS-010, SwRS-013) |
|
||||
| 4 | Dashboard | flach | 3 (StRS-009, SyRS-011, SwRS-014) |
|
||||
| 5 | DataExchange | mittel | 7 (StRS-010/011, SyRS-012/013, SwRS-015/016/017) |
|
||||
| 6 | ExternalTool | flach | 3 (StRS-012, SyRS-014, SwRS-018) |
|
||||
| 7 | Finances | mittel | 8 (StRS-013/014, SyRS-015/016/017, SwRS-019/020/021) |
|
||||
| 8 | Global | flach | 3 (StRS-015, SyRS-018, SwRS-022) |
|
||||
| 9 | Gui | flach | 3 (StRS-016, SyRS-019, SwRS-023) |
|
||||
| 10 | Helpdesk | flach | 3 (StRS-017, SyRS-020, SwRS-024) |
|
||||
| 11 | Logistic | mittel | 6 (StRS-018/019, SyRS-021/022, SwRS-025/026) |
|
||||
| 12 | Massenupdates | flach | 3 (StRS-020, SyRS-023, SwRS-027) |
|
||||
| 13 | MyCentron | flach | 3 (StRS-021, SyRS-024, SwRS-028) |
|
||||
| 14 | OnlineBanking | flach | 3 (StRS-022, SyRS-025, SwRS-029) |
|
||||
| 15 | PLM | flach | 3 (StRS-023, SyRS-026, SwRS-030) |
|
||||
| 16 | PasswordManager | flach | 3 (StRS-024, SyRS-027, SwRS-031) |
|
||||
| 17 | PayersAndCostCenter | flach | 3 (StRS-025, SyRS-028, SwRS-032) |
|
||||
| 18 | Production | flach | 3 (StRS-026, SyRS-029, SwRS-033) |
|
||||
| 19 | ProjectManagement | flach | 3 (StRS-027, SyRS-030, SwRS-034 - alle mit Sonderfall-/HYPOTHESE-Kennzeichnung) |
|
||||
| 20 | ProjectPriceImport | flach | 3 (StRS-028, SyRS-031, SwRS-060) |
|
||||
| 21 | Purchasing | mittel | 6 (StRS-029/030, SyRS-032/033, SwRS-058/035) |
|
||||
| 22 | QM | flach | 3 (StRS-031, SyRS-034, SwRS-036) |
|
||||
| 23 | Reports | flach | 3 (StRS-032, SyRS-035, SwRS-037) |
|
||||
| 24 | Rma | flach | 3 (StRS-033, SyRS-036, SwRS-038) |
|
||||
| 25 | Sales | flach | 3 (StRS-034, SyRS-037, SwRS-039) |
|
||||
| 26 | Statistics | flach | 3 (StRS-035, SyRS-038, SwRS-059) |
|
||||
| 27 | Survey | flach | 3 (StRS-036, SyRS-039, SwRS-040 - HYPOTHESE) |
|
||||
| 28 | TelekomDive | flach | 3 (StRS-037, SyRS-040, SwRS-041) |
|
||||
| 29 | Warehousing | flach | 3 (StRS-038, SyRS-041, SwRS-042) |
|
||||
| 30 | Centron.BL (Kern/Security) | tief* | 0 zusätzliche - deckungsgleich mit Zeile 1 (Administration); Security-/Rights-/2FA-/Lizenz-/OIDC-Logik liegt vollständig in `Centron.BL` und ist dort mitbelegt. |
|
||||
| 31 | Centron.DAO | flach | 2 (SyRS-045, SwRS-046) |
|
||||
| 32 | Centron.Entities | flach | 2 (SyRS-046, SwRS-047) |
|
||||
| 33 | Centron.Gateway | flach | 2 (SyRS-047, SwRS-048) |
|
||||
| 34 | Centron.Interfaces | flach | 2 (SyRS-048, SwRS-049) |
|
||||
| 35 | Centron.Common | flach | 2 (SyRS-044, SwRS-045) |
|
||||
| 36 | Centron.Controls / Controls.Preview | flach | 2 (SyRS-049, SwRS-050) |
|
||||
| 37 | Centron.Core | flach | 2 (SyRS-050, SwRS-051) |
|
||||
| 38 | Centron.WPF.UI.Extension | flach | 2 (SyRS-051, SwRS-052) |
|
||||
| 39 | CentronNexus (Webportal) | flach | 3 (StRS-039, SyRS-042 - HYPOTHESE, SwRS-043) |
|
||||
| 40 | CentronNexus.Host | flach | 2 (SyRS-052, SwRS-053) |
|
||||
| 41 | CentronNexus.OutlookAddIn | flach | 3 (StRS-040, SyRS-043, SwRS-044) |
|
||||
| 42 | Centron Webservice-Schicht | flach* | 0 zusätzliche - deckungsgleich mit Zeile 1 (Administration); die Autorisierungsschicht (`Centron.Controllers`) ist über SyRS-002/SwRS-003 (REST-Autorisierung) abgedeckt. |
|
||||
| 43 | c-entron.misc.ConnectionManager | flach | 2 (SyRS-053, SwRS-054) |
|
||||
| 44 | Centron.APIs.FinAPI | flach* | 0 zusätzliche eigenständige - als SEKUNDÄR-Beleg in StRS-022/SyRS-025/SwRS-029 (OnlineBanking) mitbelegt, kein eigenständiges Requirement-Tripel. |
|
||||
| 45 | Produktdaten-Schnittstellen (Cop/Egis/ITscope/Icecat) | flach | 3 (StRS-030, SyRS-033, SwRS-035) |
|
||||
| 46 | Centron.Api.EbInterface | mittel | 4 (StRS-011, SyRS-013, SwRS-016/017) |
|
||||
| 47 | Versanddienstleister-APIs (GLS/Shipcloud) | flach | 3 (StRS-019, SyRS-022, SwRS-026) |
|
||||
| 48 | Centron.Api.docuFORM | flach | 2 (SyRS-054, SwRS-055) |
|
||||
| 49 | Deployment/Installer | flach | 2 (SyRS-055, SwRS-056) |
|
||||
| 50 | Docker/Infrastruktur | flach | 2 (SyRS-056, SwRS-057 - HYPOTHESE) |
|
||||
|
||||
**Summe der eigenständigen Anforderungen (ohne die drei mit „*“ markierten Querverweis-Zeilen):**
|
||||
40 StRS + 56 SyRS + 60 SwRS = **156 Anforderungen**.
|
||||
|
||||
## Konsistenzcheck
|
||||
|
||||
Durchgeführt am fertigen Anforderungs-Set vor Abgabe (automatisiert per Skript sowie manuell
|
||||
gegengeprüft):
|
||||
|
||||
**1. Doppelte oder mehrfach vergebene IDs.** Keine gefunden. `grep`-Auszählung: 40 eindeutige
|
||||
StRS-IDs, 56 eindeutige SyRS-IDs, 60 eindeutige SwRS-IDs; jede ID kommt in ihrer Datei genau
|
||||
einmal als `ID:`-Zeile vor.
|
||||
|
||||
**2. Anforderungen ohne Beleg.** Keine gefunden. Jede der 156 Anforderungen führt einen
|
||||
`Belege:`-Abschnitt mit mindestens einem klassifizierten Eintrag (`PRIMÄR`/`SEKUNDÄR`/`KONTEXT`/`HYPOTHESE`).
|
||||
|
||||
**3. Anforderungen ohne Angabe zur Übernahmewürdigkeit.** Keine gefunden. Alle 156 Anforderungen
|
||||
führen das Feld `Übernahmewürdigkeit`.
|
||||
|
||||
**4. Tracelinks auf nicht existierende IDs.** Ein Fehler wurde während der Erstellung gefunden und
|
||||
vor Abgabe korrigiert: `SyRS-053` referenzierte ursprünglich `StRS-042` (nicht existent, da StRS
|
||||
nur bis 040 reicht); der Tracelink wurde auf `-` korrigiert, da `c-entron.misc.ConnectionManager`
|
||||
keine eindeutige StRS-Entsprechung hat. Nach Korrektur: Jeder Tracelink in SyRS.md verweist auf eine
|
||||
existierende StRS-ID (geprüft für alle 56 Zeilen); jeder Tracelink in SwRS.md verweist auf eine
|
||||
existierende SyRS-ID (geprüft für alle 60 Zeilen); jede der 40 StRS-IDs wird von mindestens einer
|
||||
SyRS-Zeile referenziert; jede der 56 SyRS-IDs wird von mindestens einer SwRS-Zeile referenziert
|
||||
(zwei weitere Lücken - SyRS-031 und SyRS-038 - wurden während der Erstellung erkannt und durch die
|
||||
zusätzlichen Anforderungen SwRS-060 bzw. SwRS-059 geschlossen; ein Tracelink-Fehler bei SwRS-035/058,
|
||||
der ursprünglich auf die falsche SyRS-Nummer zeigte, wurde ebenfalls korrigiert).
|
||||
|
||||
**5. Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk.** Geprüft durch
|
||||
Quervergleich der `Aussage`-Felder je Ebene. Vier echte Konsolidierungsfälle wurden identifiziert
|
||||
und markiert: StRS-019/SyRS-022 (GLS vs. Shipcloud - zwei parallele Versanddienstleister-Integrationen),
|
||||
StRS-023 (PLM - Modul `Modules/PLM` und `Modules/Finances/ProductLifecycleManagement` bilden denselben
|
||||
fachlichen Gegenstand in getrennten Modulbäumen), StRS-030/SyRS-033/SwRS-035 (vier parallele
|
||||
Produktdaten-API-Integrationen ohne gemeinsame Abstraktion), SyRS-047 (mehrere lieferantenspezifische
|
||||
EDI-Gateway-Konnektoren, u. a. Alltron/Concerto). Keine weiteren Duplikate wurden bei diesem
|
||||
Anforderungsumfang festgestellt; bei einer Vertiefung der 145 nicht einzeln geöffneten Unterordner
|
||||
(siehe Selbstbewertung) sind weitere Konsolidierungskandidaten wahrscheinlich, insbesondere im
|
||||
Umfeld des in der Aufgabenstellung genannten Beispiels (Drucker als „Stammblätter“ vs. „Assets“),
|
||||
das in dieser Iteration nicht eigenständig verifiziert wurde.
|
||||
|
||||
**6. Liste aller risikorelevanten Anforderungen** (Sicherheit, Abrechnung/Fakturierung,
|
||||
Berechtigungen) mit Belegsituation. Insgesamt 41 von 156 Anforderungen (26,3 %) sind risikorelevant.
|
||||
Ein Verstoß gegen die risikobasierte Priorisierung (Status `belegt` ohne `PRIMÄR`-Beleg) wurde während
|
||||
der Erstellung zweimal gefunden und vor Abgabe korrigiert (SyRS-008: fehlender PRIMÄR-Beleg trotz
|
||||
Status `belegt` - ein SEKUNDÄR-Beleg wurde nach Prüfung zu PRIMÄR umklassifiziert, da er tatsächlich
|
||||
die durchsetzende Stelle zeigt; SwRS-020: Status von `belegt` auf `HYPOTHESE` korrigiert, da nur ein
|
||||
SEKUNDÄR-Beleg vorlag). Nach Korrektur:
|
||||
|
||||
| ID | Titel | PRIMÄR-Beleg vorhanden | Status |
|
||||
|---|---|---|---|
|
||||
| StRS-001 | Rechte- und Gruppenverwaltung | ja | belegt |
|
||||
| StRS-003 | Lizenzverwaltung | ja | belegt |
|
||||
| StRS-004 | DSGVO-Datenbereinigung | ja | belegt |
|
||||
| StRS-005 | Zwei-Faktor-Authentifizierung für Benutzeranmeldung | ja | belegt |
|
||||
| StRS-006 | Single Sign-On mit Microsoft Entra ID | ja | belegt |
|
||||
| StRS-013 | Automatisierte Vertragsfakturierung | ja | belegt |
|
||||
| StRS-014 | Mahnwesen | ja | belegt |
|
||||
| StRS-022 | Abgleich unbekannter Bankverbindungen im Zahlungsverkehr | ja | belegt |
|
||||
| StRS-024 | Passwortrichtlinien im Passwort-Manager | ja | belegt |
|
||||
| SyRS-001 | Rechteprüfung auf Datenbankebene | ja | belegt |
|
||||
| SyRS-002 | REST-Webservice-Autorisierung je Endpunkt | ja | belegt |
|
||||
| SyRS-003 | Niederlassungsbezogene Einschränkung der Rechteverwaltung | ja | belegt |
|
||||
| SyRS-004 | Lizenzprüfung vor Ausführung lizenzpflichtiger Funktionen | ja | belegt |
|
||||
| SyRS-005 | Rechtegesteuerte Sichtbarkeit von DSGVO-Löschfunktionen | ja | belegt |
|
||||
| SyRS-006 | TOTP-basierte Zwei-Faktor-Validierung | ja | belegt |
|
||||
| SyRS-007 | OpenID-Connect-Anmeldeablauf | ja | belegt |
|
||||
| SyRS-008 | Getrennte Authentifizierungspfade (Mitarbeiter/Kunde/Outlook) | ja (nach Korrektur) | belegt |
|
||||
| SyRS-016 | Kontingentberechnung für Vertrags-Abrechnungen | nein | **HYPOTHESE** |
|
||||
| SyRS-017 | Zustandsgesicherter Mahnlauf je Kunde | ja | **HYPOTHESE** (Übergangsregeln unbelegt) |
|
||||
| SyRS-019 | Rechtegesteuerte Sichtbarkeit öffentlicher UI-Profile | ja | belegt |
|
||||
| SyRS-025 | Geführter Abgleichprozess für unbekannte IBANs | ja | belegt |
|
||||
| SyRS-027 | Zugriffsbereiche/-rechte/Richtlinien im Passwort-Manager | ja | belegt |
|
||||
| SyRS-032 | Statusverwaltung eingehender EDI-Nachrichten | ja | belegt |
|
||||
| SyRS-044 | Unterdrückung von E-Mail-Versand an externe Adressen | ja | belegt |
|
||||
| SwRS-001 | SQL-Abfrage der Benutzerrechte | ja | belegt |
|
||||
| SwRS-002 | Fail-Closed-Verhalten HasUserRight | ja | belegt |
|
||||
| SwRS-003 | Autorisierungsfilter (401/403) | ja | belegt |
|
||||
| SwRS-005 | Lizenzprüfung in OpenIdConnectAuthenticator | ja | belegt |
|
||||
| SwRS-006 | Rechteabhängige DSGVO-Properties | ja | belegt |
|
||||
| SwRS-007 | TOTP-Validierung | ja | belegt |
|
||||
| SwRS-008 | Fehlerfall „kein 2FA-Schlüssel“ | ja | belegt |
|
||||
| SwRS-009 | Subject-Identifier-Lookup | ja | belegt |
|
||||
| SwRS-011 | Getrennte Rechtemodelle AppUser/WebAccount | ja | belegt |
|
||||
| SwRS-019 | Fortschreibung LastSubsequentBillingDate | nein | **HYPOTHESE** |
|
||||
| SwRS-020 | Kontingent-/Überbuchungsmethoden ReceiptContractBL | nein | **HYPOTHESE** (nach Korrektur) |
|
||||
| SwRS-023 | Sichere Vorbelegung IsPrivate=true | ja | belegt |
|
||||
| SwRS-026 | Fehlercode-Klasse CentronGlsErrors | ja | belegt |
|
||||
| SwRS-031 | Drei getrennte Passwort-Manager-Controller | ja | belegt |
|
||||
| SwRS-034 | Fehlende Rechte-/Lizenzschranke ProjectManagement | ja | **HYPOTHESE** (Vollständigkeit der Aussage unbelegt) |
|
||||
| SwRS-045 | E-Mail-Umleitung DeveloperSecurity | ja | belegt |
|
||||
| SwRS-051 | TOTP-Bibliothek in Centron.Core | ja | belegt |
|
||||
| SwRS-055 | OAuth für docuFORM | ja | belegt |
|
||||
| SwRS-058 | Statusflags/Rechte-Flags EDIManagementViewModel | ja | belegt |
|
||||
|
||||
**7. Abgleich Hypothesen.md gegen Inline-Markierungen.** Deckungsgleich: 9 Anforderungen mit
|
||||
`Status: HYPOTHESE` in StRS.md/SyRS.md/SwRS.md (SyRS-016, SyRS-017, SyRS-030, SyRS-042, SwRS-019,
|
||||
SwRS-020, SwRS-034, SwRS-040, SwRS-057), exakt 9 Zeilen in Hypothesen.md, keine zusätzlichen freien
|
||||
Fragen in der Tabelle (offene Punkte ohne Anforderungsbezug sind separat als eigener Abschnitt
|
||||
"Offene Punkte ohne zugehörige Einzelanforderung" geführt, nicht in der Tabelle selbst).
|
||||
|
||||
## Selbstbewertung
|
||||
|
||||
**Verteilung der Analysetiefe über die 50 Inventarzeilen:**
|
||||
- **tief:** 2 Zeilen (Administration; Centron.BL/Security als Querverweis auf Administration)
|
||||
- **mittel:** 5 Zeilen (DataExchange, Finances, Logistic, Purchasing, Centron.Api.EbInterface)
|
||||
- **flach:** 43 Zeilen (davon 2 als Querverweis-Zeilen ohne eigene Anforderungskette: Centron
|
||||
Webservice-Schicht, Centron.APIs.FinAPI - beide dennoch mit mindestens einem PRIMÄR- bzw.
|
||||
SEKUNDÄR-Beleg innerhalb einer anderen Anforderung mitbelegt)
|
||||
- **nicht analysiert:** 0 Zeilen
|
||||
|
||||
**Wurde die Mindestabdeckung erreicht?** Ja. Jede der 50 Inventarzeilen ist entweder durch eine
|
||||
eigene StRS/SyRS/SwRS-Anforderungskette oder durch einen expliziten Querverweis auf eine
|
||||
Anforderung einer anderen Zeile (Zeilen 30, 42, 44 - mit Begründung in der Abdeckungstabelle)
|
||||
belegt. Kein Modul musste als „nicht analysiert“ mit Begründung geführt werden. Die drei
|
||||
Querverweis-Zeilen wurden nicht als eigenständige Anforderungen gezählt, um die Gesamtsumme
|
||||
(156) nicht künstlich durch Mehrfachzählung derselben Belege aufzublähen; das ist eine bewusste
|
||||
methodische Entscheidung dieser Iteration, die in einer Folge-Iteration (z. B. durch dedizierte,
|
||||
eigenständige Anforderungen für die Webservice-Autorisierungsschicht oder FinAPI-Anbindung
|
||||
unabhängig vom jeweiligen Trägermodul) aufgelöst werden könnte.
|
||||
|
||||
**An welchen Stellen war der Beleg dünn?** Am dünnsten belegt ist die automatisierte
|
||||
Vertragsfakturierung inkl. Kontingentabrechnung (Finances/Zeile 7): Zwei von drei SwRS-Anforderungen
|
||||
in diesem Bereich (SwRS-019, SwRS-020) stützen sich nur auf die Entwicklerdokumentation
|
||||
`contracts-backend.md`, nicht auf den gelesenen Methodenkörper von `AutomaticFacturaBL.Contracts.cs`
|
||||
bzw. `ReceiptContractBL.cs`, und sind entsprechend als `HYPOTHESE` geführt. Ebenfalls dünn: die
|
||||
serverseitige Mandantenisolation im Kundenportal (SyRS-042, CentronNexus) - hier wurde nur die
|
||||
Portal-Architektur (getrennte Login-Routen), nicht der serverseitige Ticket-Query-Handler selbst
|
||||
gelesen, obwohl es sich um eine sicherheitsrelevante Aussage handelt. Bei den 13 rein technischen
|
||||
Querschnittskomponenten (Zeilen 31-38, 40, 43, 48-50) stützen sich die Belege überwiegend auf
|
||||
Verzeichnis-/Projektstruktur statt auf gelesene Methodenkörper - für diese Komponenten wurde
|
||||
bewusst Breite (Existenznachweis der Architekturschicht) vor Tiefe (Verhalten einzelner Methoden)
|
||||
priorisiert, da sie keine unmittelbar risikorelevante Fachlogik enthalten.
|
||||
|
||||
**Hypothesenquote:** 9 von 156 Anforderungen (5,8 %) sind als `HYPOTHESE` markiert. Das ist niedriger
|
||||
als in Iteration 1 an mehreren Stellen erreicht (bis zu 26,2 %), aber deutlich über 0 % - die
|
||||
Hypothesenpflicht wurde also nicht durch Weglassen unsicherer Aussagen umgangen. Die vergleichsweise
|
||||
niedrige Quote erklärt sich dadurch, dass für die meisten Anforderungen tatsächlich ein konkreter
|
||||
Methodenkörper oder eine konkrete Codestruktur gelesen wurde, bevor die Anforderung formuliert wurde
|
||||
(Belegpflicht „ohne Beleg keine Anforderung“ wurde durchgängig eingehalten - offene Punkte, die sich
|
||||
nicht durch Lesen einer zusätzlichen Datei hätten klären lassen, wurden nicht in Kauf genommen,
|
||||
sondern es wurde entweder das Artefakt gelesen oder die Aussage als Hypothese markiert). Die neun
|
||||
Hypothesen konzentrieren sich auf drei Muster: (a) Aussagen, die nur auf Dokumentation statt
|
||||
gelesenem Code beruhen (SyRS-016, SwRS-019, SwRS-020), (b) Aussagen über eine tatsächliche
|
||||
Nicht-Existenz einer Prüfung, die sich streng genommen nie vollständig negativ beweisen lässt
|
||||
(SyRS-030, SwRS-034 - „keine Rechteschranke gefunden“ statt „keine Rechteschranke vorhanden“), und
|
||||
(c) Aussagen über nicht verifizierte Konsistenz-/Übergangslogik (SyRS-017, SyRS-042, SwRS-040,
|
||||
SwRS-057).
|
||||
|
||||
**Welche Erkenntnisse legen einen Nachschlag in einer Folge-Iteration nahe?**
|
||||
- Die 145 Unterordner unterhalb der 29 Top-Level-UI-Module wurden nicht einzeln geöffnet; eine
|
||||
Folge-Iteration mit Fokus auf einzelne Risikobereiche (z. B. `Administration/SepaContract`,
|
||||
`Administration/DSGVO` im Detail, `Finances/Dunning` über die beiden gefundenen Enums hinaus,
|
||||
`Administration/RightsManagement` UI-Ebene) könnte die Abdeckung dort von „flach“ auf „mittel“
|
||||
oder „tief“ heben.
|
||||
- Die vier identifizierten Konsolidierungskandidaten (PLM, GLS/Shipcloud, vier Produktdaten-APIs,
|
||||
EDI-Gateway-Konnektoren) sollten mit dem in der Aufgabenstellung genannten Referenzbeispiel
|
||||
(Drucker als „Stammblätter“ vs. „Assets“) abgeglichen werden - dieses Beispiel selbst wurde in
|
||||
dieser Iteration nicht im Code verifiziert.
|
||||
- Die automatisierte Vertragsfakturierung (`AutomaticFacturaBL.Contracts.cs`, `ReceiptContractBL.cs`)
|
||||
ist trotz ihrer hohen fachlichen Risikorelevanz (Umsatzrelevanz, Kontingentabrechnung) bislang nur
|
||||
über Dokumentation, nicht über gelesenen Code belegt - dies sollte in der nächsten Iteration
|
||||
priorisiert vertieft werden, um die beiden verbliebenen Hypothesen in diesem Bereich zu klären.
|
||||
- Die serverseitige Mandantenisolation im Kundenportal (SyRS-042) ist eine sicherheitskritische
|
||||
Hypothese, die vor einer produktiven SaaS-Migration zwingend am tatsächlichen Backend-Code
|
||||
verifiziert werden sollte, nicht nur aus der Portal-Architektur erschlossen werden darf.
|
||||
- Für die 13 rein technischen Querschnittskomponenten wäre eine Vertiefung auf Methodenebene
|
||||
sinnvoll, sobald der Fokus von „vollständiges Inventar“ (Ziel dieser Iteration) zu
|
||||
„migrationsreife Detailspezifikation“ einzelner Komponenten wechselt.
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
# Glossar - c-entron ERP-Suite
|
||||
|
||||
Domänenbegriffe, die in StRS.md, SyRS.md und SwRS.md verwendet werden, mit Erstauftrittsstelle
|
||||
im Quellcode bzw. in der Dokumentation.
|
||||
|
||||
| Begriff | Bedeutung | Fundstelle |
|
||||
|---|---|---|
|
||||
| **I3D** | Durchgängige Namenskonvention für Primär-/Fremdschlüssel-Felder (z. B. `AppUserI3D`, `CustomerI3D`, `BranchI3D`) im gesamten Datenmodell. Vermutlich historisch aus dem Legacy-System übernommen; die genaue Herkunft der Abkürzung ist aus dem Code nicht ersichtlich. | Durchgängig, z. B. `AppRightsBL.cs`, `Centron.Entities` |
|
||||
| **Sichtrus / Sichmemb** | Legacy-Datenbanktabellen (deutsche Namen) zur Abbildung des Rechte-Gruppen-Modells: `Sichtrus` verknüpft Gruppe↔Recht, `Sichmemb` verknüpft Benutzer↔Gruppe. | `AppRightsBL.cs:97-101` |
|
||||
| **AppRight / AppGroup** | Entitätsklassen für ein einzelnes Anwendungsrecht (`AppRight`) bzw. eine Rechtegruppe (`AppGroup`), der Benutzer zugeordnet werden. | `AppRightsBL.cs` |
|
||||
| **AppUser / WebAccount** | Zwei getrennte Kontotypen: `AppUser` für interne Mitarbeiter (Desktop-Client-Anmeldung), `WebAccount` für externe Kunden (Web-Portal-Anmeldung). Beide haben eigenständige Rechtemodelle (`HasUserRight` vs. `HasWebRight`). | `UserRightsExt.cs` |
|
||||
| **Mandant / Niederlassung (Branch)** | Organisatorische Einheit zur Mandanten-/Standorttrennung; Datensätze können über `BranchI3D` auf eine Niederlassung eingeschränkt sein. | `AppRightsBL.cs:39-48` |
|
||||
| **OpenIdConnectSubjectIdentifier (oid-Claim)** | In Microsoft Entra ID eindeutige, unveränderliche Benutzerkennung, die im `AppUser`-Datensatz gespeichert wird und die SSO-Anmeldung eindeutig einem Konto zuordnet. | `OpenIdConnectAuthenticator.cs:17,61` |
|
||||
| **MSAL** | Microsoft Authentication Library; clientseitige Bibliothek zum Abrufen von OIDC-Tokens von Microsoft Entra ID. | `anmelden-mit-microsoft-technische-anleitung.md` |
|
||||
| **LicenseGuids / ApplicationKind** | `LicenseGuids.cs` listet alle vergebbaren Lizenz-GUIDs (Anwendungen und Einzelfeatures); `ApplicationKind.cs` listet die Teilmenge, die sich am Webservice anmelden darf. | `licensing-system.md` |
|
||||
| **Kontingent** | Vertraglich vereinbartes Mengen-/Betrags-Guthaben (z. B. Klickkontingent bei Drucker-/Kopierer-Verträgen), das gegen den tatsächlichen Verbrauch verrechnet wird; Über-/Unterschreitung wird gesondert behandelt. | `ReceiptContract`, `contracts-backend.md` |
|
||||
| **VertragKopf / VertragPos** | Legacy-Datenbanktabellen für Vertragskopf- bzw. Vertragspositionsdaten; werden über die Views `Contracts`/`ContractItems` in modernerer, englischsprachiger Form bereitgestellt. | `contracts-backend.md` |
|
||||
| **Automatisierte Fakturierung** | Prozess, bei dem Rechnungen zu fälligen Verträgen ohne manuelles Zutun anhand des konfigurierten Abrechnungsintervalls erzeugt werden. | `AutomaticFacturaBL.Contracts.cs` |
|
||||
| **Mahnlauf (Dunning Run)** | Kontrollierter, mehrstufiger Prozess (`None → Declined/Accepted → Processing → Success/Failure`) zur Erstellung von Mahnungen für überfällige Rechnungen/Gutschriften eines Kunden. | `DunningRunForCustomerState.cs` |
|
||||
| **ebInterface** | Österreichischer XML-Standard für elektronische Rechnungen (Version 4.3 im Code referenziert), insbesondere für B2G-Rechnungen an öffentliche Auftraggeber. | `EbInterfaceLogic.cs` |
|
||||
| **ZUGFeRD / XRechnung** | Verwandte, in Deutschland/EU verbreitete Standards für elektronische Rechnungen; im Projekt referenziert, aber laut Doku (`xrechnung.md`) noch nicht auf eine externe Referenzbibliothek umgestellt. | `docs/reference/zugferd-field-mapping.md`, `docs/guides/development/xrechnung.md` |
|
||||
| **DATEV** | Deutsches Standardformat/-dienstleistersystem für den Austausch von Buchhaltungsdaten mit Steuerberatern; c-entron bietet eine „DATEV Online“-Anbindung. | `Modules/DataExchange/DatevOnline2020` |
|
||||
| **CentronObjectKindNumeric** | Zentrale Enum-/Kennzahl-Typisierung, mit der generische Mechanismen (u. a. Zusatzfelder, Änderungsprotokoll) einem beliebigen fachlichen Objekttyp (Kunde, Beleg, …) zugeordnet werden. | `CustomPropertiesConnector.cs` |
|
||||
| **RMA (Return Merchandise Authorization)** | Retourenvorgang; im System unterschieden nach `CustomerRma` (Kundenware) und `OwnRma` (Eigenware). | `NewRmaSummaryPageViewModel.cs` |
|
||||
| **MSP (Managed Service Provider)** | Geschäftsmodell mit wiederkehrenden, oft nutzungsbasierten Verträgen (z. B. Klickabrechnung bei Druckern); mehrere Module (`MspStatistics`, `MspCollectors`, Kontingentabrechnung) sind auf dieses Modell zugeschnitten. | `Modules/Statistics/MspStatistics`, `contracts-backend.md` |
|
||||
| **Kostenstelle / Kostenträger** | Zwei getrennte, aber kombinierbare betriebswirtschaftliche Zuordnungsobjekte für Kostenauswertungen; Kostenstelle = organisatorische Einheit, Kostenträger = Projekt-/Auftragsbezug. | `PayersAndCostCenterAppModuleController.cs` |
|
||||
| **EDI (Electronic Data Interchange)** | Elektronischer, strukturierter Austausch von Geschäftsdokumenten (Bestellung, Lieferschein, Rechnung) mit Lieferanten; im Code u. a. für die Formate Alltron und Concerto konkret implementiert. | `Centron.Gateway/EDI_Alltron`, `Concerto/ConcertoOrder.cs` |
|
||||
| **TOTP (Time-based One-Time Password)** | Standardverfahren für zeitbasierte Einmalpasswörter, hier über die Bibliothek `Centron.Core.GoogleAuthenticator` zur Umsetzung der Zwei-Faktor-Authentifizierung genutzt. | `TwoFactorAuthenticationBL.cs` |
|
||||
| **CentronNexus / Serviceboard** | Blazor-basiertes Web-Portal, das Kunden und Mitarbeitern eine Kanban-artige Ticketübersicht sowie Web-Angebote/-Warenkorb bereitstellt. | `src/nexus/CentronNexus/ServiceBoard` |
|
||||
| **DIVE** | Partnervertriebsplattform der Deutschen Telekom, an die Angebotsdaten über ein dediziertes Exportformat übermittelt werden. | `TelekomDiveExportViewModel.cs` |
|
||||
| **PLM (Product Lifecycle Management)** | Verwaltung von Artikeln in Produktfamilien/-gruppen mit Lebenszyklusstatus; im Code über zwei getrennte Modulbäume (`Modules/PLM`, `Modules/Finances/ProductLifecycleManagement`) verteilt. | `PlmAppModuleController.cs` |
|
||||
| **docuFORM** | Externer, spezialisierter Dienst zur Dokumenten-/Formulargenerierung, über eine eigene OAuth-authentifizierte REST-API angebunden. | `Centron.Api.docuFORM` |
|
||||
| **Sonderkonditionen (Special Agreements)** | Kundenindividuell vereinbarte Abweichungen vom Listenpreis, gegen die importierte Preislisten automatisiert abgeglichen werden. | `DifferenceViewModel.cs` |
|
||||
| **BLSession / DAOSession** | Interne Sitzungsobjekte der Business-Logik- bzw. Datenzugriffsschicht, über die NHibernate-Sessions und BL-Instanzen (`session.GetBL<T>()`) bezogen werden. | `AppRightsBL.cs`, `DAOFactory.cs` |
|
||||
| **NHibernate / FluentNHibernate** | Objektrelationales Mapping-Framework (ORM), über das die Datenzugriffsschicht (`Centron.DAO`) auf die SQL-Server-Datenbank zugreift. | `DAOFactory.cs` |
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# Hypothesen - c-entron ERP-Suite
|
||||
|
||||
Diese Datei listet ausschließlich Anforderungen, die im Feld `Status` mit `HYPOTHESE` markiert sind.
|
||||
Sie ist deckungsgleich mit den Inline-Markierungen `[HYPOTHESE]` in StRS.md, SyRS.md und SwRS.md
|
||||
(Abgleich siehe Analysebericht.md, Abschnitt "Konsistenzcheck"). Es sind neun Anforderungen betroffen,
|
||||
keine auf StRS-Ebene.
|
||||
|
||||
| ID | Titel | Ebene | Offene Frage (was fehlt zur Bestätigung) |
|
||||
|---|---|---|---|
|
||||
| SyRS-016 | Kontingentberechnung für Vertrags-Abrechnungen | SyRS | Der konkrete Berechnungsalgorithmus (Rundungsregel, Reihenfolge von Rest- und Überbuchung) wurde nicht im Quellcode selbst nachvollzogen. `ReceiptContractBL.cs` (insb. `ContractContingentBalanceCalculation`) wurde in dieser Iteration nicht im Volltext gelesen; nur die Dokumentation `contracts-backend.md` wurde ausgewertet. Zur Bestätigung müsste die Methode gelesen und gegen Testfälle (z. B. Kontingent 100, Verbrauch 120) verifiziert werden. |
|
||||
| SyRS-017 | Zustandsgesicherter Mahnlauf je Kunde | SyRS | Der Enum `DunningRunForCustomerState` belegt den Zustandsraum, nicht aber die Übergangsregeln (welcher Zustand darf in welchen wechseln). Die durchsetzende State-Machine-Klasse wurde in dieser Iteration nicht lokalisiert. Zur Bestätigung müsste die Klasse gefunden werden, die Zustandsübergänge tatsächlich prüft/verhindert. |
|
||||
| SyRS-030 | Herstellerinterne Sonderfreigabe eines Moduls (kein Kundenfeature) | SyRS | Es wurde keine Lizenz-GUID gefunden, die das Modul „Projektverwaltung“ technisch auf NEXOWARE-interne Nutzung beschränkt. Möglich ist eine produktweite Lizenzsteuerung außerhalb des Modul-Controllers, die in dieser Iteration nicht recherchiert wurde. Zur Bestätigung müsste geprüft werden, ob ein Kundenmandant das Modul in der Praxis sehen kann. |
|
||||
| SyRS-042 | Mandantenisolierte Kanban-Ticketansicht im Webportal | SyRS | Die serverseitige Filterung der Ticketdaten nach Kunde/`WebAccount` wurde nicht im Backend-Code (z. B. im Ticket-Query-Handler) nachvollzogen, sondern aus der Portal-Architektur (getrennte Login-Route `/auth/customer`) erschlossen. Zur Bestätigung müsste die serverseitige Query-Logik gelesen werden, die die Kanban-Daten für einen Kunden liefert. |
|
||||
| SwRS-019 | Fortschreibung von LastSubsequentBillingDate nach Abrechnungslauf | SwRS | Die exakte Stelle und Bedingung der Datumsfortschreibung (insbesondere das Verhalten bei einem fehlgeschlagenen Abrechnungslauf/Transaktionsabbruch) wurde nicht im Quellcode verifiziert, da `AutomaticFacturaBL.Contracts.cs` nicht im Volltext gelesen wurde. Zur Bestätigung müsste die Methode gelesen und ein Fehlerfall-Test durchgeführt werden. |
|
||||
| SwRS-020 | Methoden ContractContingentBalanceCalculation/UpdateTakeRestAndOverBooking in ReceiptContractBL | SwRS | Nur die Entwicklerdokumentation (`contracts-backend.md`), nicht der Methodenkörper von `ReceiptContractBL.cs` selbst wurde gelesen. Da es sich um risikorelevante Abrechnungslogik handelt, ist gemäß Vorgabe zwingend ein PRIMÄR-Beleg erforderlich; ohne Lesen des Methodenkörpers kann die konkrete Berechnungsregel nicht bestätigt werden. |
|
||||
| SwRS-034 | Fehlende technische Rechte-/Lizenzschranke in ProjectManagementAppModuleController.GetRights | SwRS | Es ist nicht ausgeschlossen, dass eine produktweite Lizenzfilterung außerhalb dieses Controllers existiert und das Modul für Kunden faktisch verbirgt. Dies wurde in dieser Iteration nicht recherchiert. Zur Bestätigung müsste eine Suche nach einer entsprechenden Lizenz-GUID bzw. ein praktischer Test mit einem Kundenmandanten erfolgen. |
|
||||
| SwRS-040 | Vier unabhängige Zählvariablen in SurveyAnalyseViewModel | SwRS | Es ist nicht verifiziert, ob eine serverseitige oder clientseitige Konsistenzprüfung zwischen den vier Statuszählern existiert (Summe = Gesamtzahl). Die befüllende Methode (vermutlich ein Service-/Webservice-Aufruf) wurde nicht gelesen. Zur Bestätigung müsste diese Methode identifiziert und die Konsistenzgarantie geprüft werden. |
|
||||
| SwRS-057 | Docker-Compose-Definitionen je Betriebszweck | SwRS | Der vermutete Zusammenhang zwischen dem Verzeichnis `c-entron-mailcatcher` und dem in `DeveloperSecurity.Email` implementierten E-Mail-Umleitungsmechanismus (SwRS-045) wurde nicht durch Lesen der zugehörigen Docker-Compose-Datei verifiziert. Es handelt sich um eine naheliegende, aber nicht am Code nachvollzogene Verknüpfung zweier getrennt aufgefundener Artefakte. |
|
||||
|
||||
## Offene Punkte ohne zugehörige Einzelanforderung
|
||||
|
||||
Diese Punkte betreffen keine einzelne, bereits formulierte Anforderung, sondern die Analyse als
|
||||
Ganzes. Sie gehören daher nicht in die Tabelle oben, sondern werden hier als allgemeine Hinweise für
|
||||
Folge-Iterationen festgehalten:
|
||||
|
||||
- **Tiefe der Backend-Lesung (Centron.BL) ist ungleich verteilt.** Für risikorelevante Bereiche
|
||||
(Rechte, Lizenzierung, 2FA, OIDC, DSGVO, E-Mail-Sicherung) wurden konkrete Methodenkörper gelesen.
|
||||
Für die automatisierte Vertragsfakturierung (`AutomaticFacturaBL.Contracts.cs`,
|
||||
`ReceiptContractBL.cs`) wurde dagegen überwiegend die Entwicklerdokumentation statt des
|
||||
Quellcodes selbst ausgewertet - siehe SyRS-016 und SwRS-019.
|
||||
- **Die 145 Unterordner unterhalb der 29 Top-Level-UI-Module wurden nicht einzeln geöffnet.**
|
||||
Für die Mindestabdeckung wurde je Top-Level-Modul mindestens eine repräsentative Datei gelesen;
|
||||
einzelne Unterordner (z. B. `Administration/SepaContract`, `Finances/Dunning/*` über
|
||||
`DunningItemType`/`DunningRunForCustomerState` hinaus) wurden nicht vertieft. Dies ist eine
|
||||
bewusste Breite-vor-Tiefe-Entscheidung dieser Iteration, siehe Selbstbewertung in
|
||||
Analysebericht.md.
|
||||
- **Die Datenbank selbst wurde nicht direkt eingesehen** (kein Zugriff auf eine laufende
|
||||
Datenbankinstanz oder auf DB-Schema-Skripte im Detail); Aussagen zu Tabellen (`dbo.Sichtrus`,
|
||||
`dbo.ARTIK`, `VertragKopf`) stützen sich auf Quellcode-Referenzen und Dokumentation, nicht auf
|
||||
eine eigenständige Schema-Analyse.
|
||||
+832
@@ -0,0 +1,832 @@
|
||||
# Stakeholder Requirements Specification (StRS) - c-entron ERP-Suite
|
||||
|
||||
Fachliche Sicht: Akteure, Geschäftsziele. Ebene: StRS. Belege beziehen sich auf Artefakte im
|
||||
Arbeitsverzeichnis `C:\DEV\MasterArbeit\QuellCode\CentronERP`. Für rein technische
|
||||
Querschnittskomponenten ohne eigenständige fachliche Stakeholder-Erzählung (z. B. ORM-Schicht,
|
||||
Entitätsmodell, Interner Gateway) wird die Mindestabdeckung direkt auf SyRS-/SwRS-Ebene erbracht
|
||||
(siehe Analysebericht, Abschnitt "Abgrenzung des Modulbegriffs" und Selbstbewertung).
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
ID: StRS-001
|
||||
Titel: Rechte- und Gruppenverwaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator
|
||||
Vorbedingung: Der Administrator ist am System angemeldet und besitzt das Recht zur Rechteverwaltung.
|
||||
Fakt: `AppRightsBL` verwaltet `AppRight`- und `AppGroup`-Entitäten; Benutzer werden Gruppen zugeordnet, Gruppen erhalten Rechte (`GetAllGroupRightAssignments`). Rechteprüfung erfolgt über die Legacy-Tabellen `dbo.Sichtrus`/`dbo.Sichmemb`.
|
||||
Aussage: Das System soll es Administratoren ermöglichen, Benutzer in Rechtegruppen zu organisieren und diesen Gruppen einzelne Anwendungsrechte granular zuzuweisen.
|
||||
Ergebnis: Ein Benutzer erhält genau die Rechte, die den Gruppen zugeordnet sind, denen er angehört.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs (GetAllRightGroups, GetAllGroupRightAssignments, CheckRightsFromUser, Zeilen 39-120) - Begründung: Zeigt die durchsetzende Stelle: SQL-Abfrage über dbo.Sichtrus/dbo.Sichmemb ermittelt tatsächlich zugewiesene Rechte je Benutzer.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Administration/RightsManagement/RightsManagmentViewModel.cs - Begründung: UI zur Pflege von Gruppen/Rechten bestätigt die fachliche Sichtbarkeit der Funktion.
|
||||
- [KONTEXT] docs/guides/development/check-userrights.md - Begründung: Entwicklerdokumentation beschreibt das Gruppen-Rechte-Modell und die vorgesehene Prüfmethode.
|
||||
Prüfidee: Einem Testbenutzer wird eine Gruppe ohne ein bestimmtes Recht zugewiesen; ein Aufruf einer rechtegeschützten Funktion muss abgelehnt werden.
|
||||
Tracelinks: SyRS-001, SyRS-002
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Rollenbasierte Rechtevergabe ist Kernvoraussetzung für jedes Mehrbenutzer-ERP-System.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-002
|
||||
Titel: Mandantenübergreifende Grundkonfiguration
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator
|
||||
Vorbedingung: Mehrere Mandanten/Niederlassungen sind im System angelegt.
|
||||
Fakt: `Administration/MandatorManagement` und `Administration/CountryManagement` bilden eigene Untermodule; `AppRightsBL.GetAllRightGroups` filtert optional nach `BranchI3D` des aktuellen Benutzers, wenn das Recht `MANAGE_RIGHTS_ONLY_OWN_BRANCH` gesetzt ist.
|
||||
Aussage: Das System soll die Verwaltung mehrerer Mandanten/Niederlassungen erlauben und den Datenzugriff optional auf die eigene Niederlassung einschränken können.
|
||||
Ergebnis: Administratoren mit eingeschränktem Recht sehen nur Gruppen/Daten der eigenen Niederlassung; Administratoren mit vollem Recht sehen alle.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:39-48 (GetAllRightGroups) - Begründung: Konkrete Bedingung `if (currentUser.HasUserRight(...MANAGE_RIGHTS_ONLY_OWN_BRANCH)) query = query.Where(f => f.BranchI3D == ...)` erzwingt die Niederlassungs-Isolation im Code.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Administration/MandatorManagement - Begründung: Eigenes UI-Untermodul zur Mandantenpflege.
|
||||
Prüfidee: Benutzer mit dem eingeschränkten Recht darf nur Gruppen der eigenen Branch-ID sehen; Prüfung per Vergleich der zurückgegebenen Liste mit der erwarteten Branch-Teilmenge.
|
||||
Tracelinks: SyRS-001
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Mandantenfähigkeit ist Grundvoraussetzung für Kunden mit mehreren Niederlassungen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-003
|
||||
Titel: Lizenzverwaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, System (Lizenzserver)
|
||||
Vorbedingung: Der Kunde hat ein oder mehrere Lizenzpakete erworben.
|
||||
Fakt: Jede lizenzierbare Funktion (Anwendung oder Einzelfeature) besitzt eine GUID in `LicenseGuids.cs`; `LicenseManager.Instance.HasLicense(...)` und `GetLicenseCount(...)` prüfen Vorhandensein und Stückzahl. `OpenIdConnectAuthenticator` bricht die Anmeldung ab, wenn `LicenseGuids.OpenIDConnectAuthentication` fehlt.
|
||||
Aussage: Das System soll pro Kunde granular steuern, welche Anwendungen und Einzelfunktionen freigeschaltet sind, inklusive optionaler Mengenbegrenzung und Gültigkeitsdauer.
|
||||
Ergebnis: Eine Funktion ist nur nutzbar, wenn die zugehörige Lizenz vorhanden, gültig und (falls mengenbeschränkt) nicht ausgeschöpft ist.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:43-47 - Begründung: Konkrete durchsetzende Prüfung `if (LicenseManager.HasLicense(LicenseGuids.OpenIDConnectAuthentication) == false) return Result...AsError(...)` verweigert die Anmeldung ohne Lizenz.
|
||||
- [KONTEXT] docs/reference/security/licensing-system.md - Begründung: Entwicklerdokumentation beschreibt das GUID-basierte Lizenzmodell mit Anzahl/Gültigkeitsdatum/Version, deckt sich mit der Codeevidenz.
|
||||
Prüfidee: Aufruf einer lizenzpflichtigen Funktion ohne zugehörige Lizenz muss einen definierten Fehler statt stillschweigenden Erfolgs liefern.
|
||||
Tracelinks: SyRS-003
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Feature-/Mengenlizenzierung ist zentrales Geschäftsmodell-Element (SaaS-Tarifierung).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-004
|
||||
Titel: DSGVO-Datenbereinigung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Datenschutzbeauftragter, Administrator
|
||||
Vorbedingung: Aufbewahrungsfristen für personenbezogene Daten sind fachlich festgelegt.
|
||||
Fakt: `CentronDataSecurityViewModel` bietet eine Filterung von Kunden-/Beleg-/Aktionsdaten nach Stichtag (`ShowDataUntil`) und rechteabhängige Löschfunktionen (`HasContactDeleteRight`, `HasDatabaseCleanupRight`).
|
||||
Aussage: Das System soll es berechtigten Rollen ermöglichen, personenbezogene Daten gezielt nach Alter/Typ zu identifizieren und rechtekontrolliert zu löschen bzw. zu bereinigen.
|
||||
Ergebnis: Nur Benutzer mit den entsprechenden Rechten können die Löschung anstoßen; die Auswahl basiert auf nachvollziehbaren Filterkriterien.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Administration/DSGVO/CentronDataSecurityViewModel.cs:21-36 - Begründung: Zeigt die Felder `HasContactDeleteRight`/`HasDatabaseCleanupRight`, die die Lösch-Aktionen rechteabhängig freischalten (durchsetzende Stelle für die UI-Ebene).
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Administration/DSGVO/CentronDataSecurityAppModuleController.cs - Begründung: Eigenständiges Modul mit dediziertem Namen "DSGVO" bestätigt fachliche Zweckbindung.
|
||||
Prüfidee: Ein Benutzer ohne `HasDatabaseCleanupRight` darf keine Bereinigung auslösen können; UI-Steuerelement muss deaktiviert/verborgen sein.
|
||||
Tracelinks: SyRS-004
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Gesetzliche Pflicht (DSGVO Art. 17) besteht unabhängig von der Zielarchitektur fort.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-005
|
||||
Titel: Zwei-Faktor-Authentifizierung für Benutzeranmeldung
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter (Anwender), Administrator
|
||||
Vorbedingung: Dem Benutzerkonto ist in der Personalverwaltung ein Zwei-Faktor-Schlüssel hinterlegt.
|
||||
Fakt: `TwoFactorAuthenticationBL.ValidateAuthenticationPin` validiert eine eingegebene PIN gegen den gespeicherten Schlüssel mittels `GoogleAuthenticator.TwoFactorAuthenticator.ValidatePin` (TOTP-Verfahren).
|
||||
Aussage: Das System soll optional eine zweite Authentifizierungsstufe (zeitbasiertes Einmalpasswort) für die Benutzeranmeldung verlangen können.
|
||||
Ergebnis: Eine Anmeldung mit falscher oder fehlender PIN wird abgelehnt, auch wenn Benutzername/Passwort korrekt sind.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:43-54 (ValidateAuthenticationPin) - Begründung: Konkrete durchsetzende Prüfung inkl. Fehlermeldung „Die eingegebene PIN ist ungültig!“ bei negativem Validierungsergebnis.
|
||||
- [SEKUNDÄR] src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:16-27 (AppUserTwoFactorAuthKeyExists) - Begründung: Zeigt, dass 2FA je Benutzer optional aktivierbar ist (Existenzprüfung des Schlüssels).
|
||||
Prüfidee: Anmeldeversuch mit korrektem Passwort, aber falscher TOTP-PIN muss fehlschlagen; mit korrekter PIN muss er gelingen.
|
||||
Tracelinks: SyRS-005
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - 2FA ist Stand der Technik für Zugriffsschutz und im SaaS-Zielsystem zu verstärken (z. B. verpflichtend statt optional).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-006
|
||||
Titel: Single Sign-On mit Microsoft Entra ID
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter (Anwender), Kunde (Web-Account)
|
||||
Vorbedingung: Der Mandant hat OpenID-Connect-Anmeldung lizenziert und in Entra ID konfiguriert.
|
||||
Fakt: `OpenIdConnectAuthenticator.AuthenticateInternal` validiert ein per MSAL geholtes ID-Token (oid-Claim), sucht den Benutzer über `OpenIdConnectSubjectIdentifier` und erstellt bei Erfolg ein Session-Ticket. CentronNexus bietet dafür eigene Login-Routen für Mitarbeiter (`/auth`) und Kunden (`/auth/customer`).
|
||||
Aussage: Das System soll die Anmeldung über die unternehmenseigene Microsoft-Identität (SSO) unterstützen, sowohl für interne Mitarbeiter als auch für Kunden im Webportal.
|
||||
Ergebnis: Ein Benutzer mit gültigem Microsoft-Token und hinterlegter Subject-ID erhält ein c-entron-Sitzungsticket ohne separates Passwort.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:39-74 - Begründung: Vollständige durchsetzende Logik: Lizenzprüfung, Authentifizierungsstatus, Subject-Identifier-Pflicht, DB-Lookup über `OpenIdConnectSubjectIdentifier`.
|
||||
- [SEKUNDÄR] src/nexus/CentronNexus/Shared/Auth/AUTHENTICATION.md - Begründung: Beschreibt getrennte Login-Einstiegspunkte für Mitarbeiter, Kunden und Outlook-Add-in sowie den Ablauf inkl. Rechte-/Lizenzprüfung.
|
||||
- [KONTEXT] docs/reference/security/anmelden-mit-microsoft-technische-anleitung.md - Begründung: Entwicklerdokumentation des vollständigen OIDC-Flows (MSAL, JWT-Validierung, Ticket-Erstellung), stützt die Interpretation.
|
||||
Prüfidee: Login mit gültigem Microsoft-Token, aber ohne hinterlegte Entra-Object-ID im Benutzerkonto muss mit definierter Fehlermeldung abgelehnt werden.
|
||||
Tracelinks: SyRS-006, SyRS-007
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - SSO ist für eine SaaS-Neuimplementierung ein zentrales, auszubauendes Sicherheitsmerkmal.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-007
|
||||
Titel: KI-gestützte Texterstellung für Artikel, Angebote und Tickets
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsmitarbeiter, Support-Mitarbeiter
|
||||
Vorbedingung: Das Modul „ArtificialIntelligence“ ist lizenziert und ein OpenAI-Zugang konfiguriert.
|
||||
Fakt: `ApiConnector` bietet Methoden wie `CreateBulletPointText`, `CreateFloatingText`, `CreateSpecificOfferPositionText` und `CreateTicketSummary`, die vordefinierte Prompts (`OpenAiPrompts`) an einen OpenAI-kompatiblen Dienst senden.
|
||||
Aussage: Das System soll Anwendern die automatische Generierung und Umformulierung von Artikelbeschreibungen, Angebotspositionstexten und Ticket-Zusammenfassungen mittels KI anbieten.
|
||||
Ergebnis: Der Anwender erhält einen KI-generierten Textvorschlag, den er übernehmen oder verwerfen kann.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ArtificialIntelligence/ApiConnector.cs:21-45 - Begründung: Konkrete Methodenverdrahtung von Fachfunktion (z. B. Artikelbeschreibung kürzen) zu einem festen Prompt-Template belegt die Funktion technisch.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/ArtificialIntelligence/Chat - Begründung: Eigenständiges Chat-Untermodul als weiterer Interaktionskanal mit der KI.
|
||||
Prüfidee: Aufruf von `CreateShortenedText` mit einer langen Artikelbeschreibung liefert einen kürzeren, sinnhaltenden Text zurück (manuelle Plausibilitätsprüfung, da KI-Ausgabe nicht deterministisch ist).
|
||||
Tracelinks: SyRS-008
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - KI-Unterstützung ist ein differenzierendes Feature, das im Zielsystem ausgebaut werden sollte.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-008
|
||||
Titel: Terminbenachrichtigungen für Ticket-Termine
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Support-Mitarbeiter, Kunde
|
||||
Vorbedingung: Für ein Ticket wurde ein Termin (z. B. Vor-Ort-Einsatz) vereinbart.
|
||||
Fakt: `AppointmentsForTicketsSettingsViewModel` verwaltet konfigurierbaren E-Mail-Betreff/-Text mit Platzhaltervariablen (`TextVariableViewModel`) für Terminbenachrichtigungen.
|
||||
Aussage: Das System soll bei Terminvereinbarung zu einem Ticket automatisch eine konfigurierbare E-Mail-Benachrichtigung mit dynamischen Platzhaltern versenden können.
|
||||
Ergebnis: Der Empfänger erhält eine E-Mail mit den im Template vorgesehenen, zur Laufzeit ersetzten Werten (z. B. Termindatum).
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Calendar/Settings/AppointmentsForTickets/AppointmentsForTicketsSettingsViewModel.cs:17-45 - Begründung: Felder für Betreff/Text und eine Sammlung von Platzhaltervariablen belegen den konfigurierbaren Benachrichtigungsmechanismus.
|
||||
Prüfidee: Speichern einer Vorlage mit Platzhalter `@@Termindatum@@` (exemplarisch) muss beim Versand durch den tatsächlichen Termin ersetzt werden.
|
||||
Tracelinks: SyRS-009
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Automatisierte Terminkommunikation reduziert manuellen Aufwand im Kundenservice.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-009
|
||||
Titel: Modulfavoriten und Startmodule im Dashboard
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter (Anwender)
|
||||
Vorbedingung: Der Anwender ist angemeldet und besitzt Zugriff auf mindestens ein Modul.
|
||||
Fakt: `ModulesViewModel` bietet `IsFavorite`, `IsAStartupModlule` sowie Befehle `AddModulToStartUpCommand`/`RemoveModulToStartUpCommand` und `ShowRequiredRightsCommand`.
|
||||
Aussage: Das System soll es Anwendern erlauben, häufig genutzte Module als Favorit zu markieren und/oder automatisch beim Programmstart zu öffnen, sowie die für ein Modul erforderlichen Rechte einzusehen.
|
||||
Ergebnis: Als Favorit/Startmodul markierte Module erscheinen entsprechend hervorgehoben bzw. werden beim nächsten Start automatisch geöffnet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Dashboard/Modules/ModulesViewModel.cs:28-43 - Begründung: Konkrete Properties/Commands belegen die personalisierbare Favoriten-/Startmodul-Logik direkt im Code.
|
||||
Prüfidee: Markieren eines Moduls als Startmodul, Neustart der Anwendung, Prüfung dass das Modul automatisch geöffnet wird.
|
||||
Tracelinks: SyRS-010
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Personalisierung der Startoberfläche ist ein anerkanntes Usability-Merkmal.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-010
|
||||
Titel: Buchhaltungsexport/-import (DATEV und weitere Formate)
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter, Steuerberater (extern)
|
||||
Vorbedingung: Belege eines Abrechnungszeitraums liegen im System vor.
|
||||
Fakt: `DataExchangeAppModuleController` ("Buchhaltungsexport/-import") bündelt Untermodule für DATEV-Online-Anbindung (`DatevOnline2020`), Zahlungsverkehr und OPOS-Import; `Centron.DAO`/`Centron.BL` referenzieren Buchhaltungs-Kontensysteme (`Warehousing/AccountSystems`).
|
||||
Aussage: Das System soll Buchhaltungsdaten (Belege, Konten, offene Posten) in vom Steuerberater/Buchhaltungssystem verwertbaren Formaten (u. a. DATEV) exportieren und importieren können.
|
||||
Ergebnis: Ein Exportlauf erzeugt eine für das Zielsystem (z. B. DATEV) formatgerechte Datei; ein Import übernimmt externe Kontodaten strukturiert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/DataExchange/BookKeeping/DataExchangeAppModuleController.cs:19-37 - Begründung: Modulbeschreibung „Export und Import von Buchhaltungsdaten“ direkt im Code, referenziert Untermodule (General, OposImports).
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/DataExchange/DatevOnline2020 - Begründung: Eigenständiges Untermodul für die DATEV-Online-Schnittstelle bestätigt die konkrete Zielplattform.
|
||||
Prüfidee: Export eines Testzeitraums erzeugt eine Datei, die von einem DATEV-Importvalidator ohne Formatfehler akzeptiert wird.
|
||||
Tracelinks: SyRS-011
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Buchhaltungsschnittstellen sind gesetzlich/prozessual zwingend für den Übergabeprozess an die Finanzbuchhaltung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-011
|
||||
Titel: Elektronische Rechnung im ebInterface-/ZUGFeRD-Format
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter, Kunde (Rechnungsempfänger, insb. öffentliche Auftraggeber AT/EU)
|
||||
Vorbedingung: Eine Rechnung (`ReceiptInfo`) wurde im System erstellt und ist zur elektronischen Übermittlung vorgesehen.
|
||||
Fakt: `EbInterfaceLogic.GenerateFile` validiert Rechnungswerte und erzeugt ein XML-Dokument im Namensraum `http://www.ebinterface.at/schema/4p3/`; die Dokumentation referenziert zusätzlich ZUGFeRD/XRechnung-Feldzuordnungen.
|
||||
Aussage: Das System soll aus einer Rechnung automatisiert eine normkonforme elektronische Rechnung im ebInterface-Format (bzw. ZUGFeRD/XRechnung-Feldern) erzeugen können.
|
||||
Ergebnis: Bei gültigen Rechnungsdaten entsteht eine valide XML-Datei gemäß ebInterface-4.3-Schema; bei ungültigen Werten wird die Erzeugung mit Fehler abgebrochen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:22-38 (GenerateFile, ValidateValues) - Begründung: Zeigt die durchsetzende Validierung vor XML-Erzeugung sowie den konkreten Namensraum/Wurzelknoten des erzeugten Dokuments.
|
||||
- [KONTEXT] docs/reference/zugferd-field-mapping.md, docs/guides/development/xrechnung.md - Begründung: Projektinterne Dokumentation zur Feldzuordnung und zu Validierungswerkzeugen (KOSIT) für die verwandten Standards ZUGFeRD/XRechnung.
|
||||
Prüfidee: Erzeugung einer ebInterface-Datei aus einer Testrechnung und Validierung gegen das offizielle ebInterface-4.3-XSD-Schema.
|
||||
Tracelinks: SyRS-012
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - E-Rechnungspflichten (u. a. B2G Österreich, künftig B2B in DE) machen dies zu einer regulatorisch notwendigen Funktion.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-012
|
||||
Titel: Einbindung externer Werkzeuge über Platzhaltervariablen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, Mitarbeiter (Anwender)
|
||||
Vorbedingung: Ein externes Werkzeug (z. B. Fernwartungssoftware, Website) ist im System als „ExternalTool“ konfiguriert.
|
||||
Fakt: `ExternalToolsVaribaleCollection` definiert feste Platzhalter (`@@Benutzername@@`, `@@BelegNummer@@`, `@@AccountNummer@@` u. a.), die beim Aufruf des externen Werkzeugs durch Laufzeitwerte ersetzt werden.
|
||||
Aussage: Das System soll es erlauben, externe Werkzeuge über konfigurierbare URLs/Aufrufe einzubinden, wobei Kontextinformationen (Beleg, Kunde, Benutzer) per Platzhalter automatisch übergeben werden.
|
||||
Ergebnis: Der Aufruf des externen Werkzeugs enthält die zum Zeitpunkt des Aufrufs gültigen Kontextwerte anstelle der Platzhalter.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ExternalTool/Variables/ExternalToolsVaribaleCollection.cs:9-34 - Begründung: Enthält die vollständige, im Code fest definierte Liste ersetzbarer Platzhalter je Kontext (Beleg, Account).
|
||||
Prüfidee: Konfiguration eines externen Tools mit `@@BelegNummer@@` im Aufruf-String; beim Öffnen aus einem Beleg heraus muss die tatsächliche Belegnummer im Aufruf erscheinen.
|
||||
Tracelinks: SyRS-013
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Workaround - Feste, hartkodierte Platzhalterliste statt generischem Template-Mechanismus; im Zielsystem durch flexibleres Konzept ersetzbar.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-013
|
||||
Titel: Automatisierte Vertragsfakturierung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter, System (automatisierter Abrechnungslauf)
|
||||
Vorbedingung: Ein Vertrag (`ReceiptContract`) mit aktivem `AutomatedBilling`-Kennzeichen und definiertem Abrechnungsintervall existiert.
|
||||
Fakt: `AutomaticFacturaBL.Contracts` generiert automatisch Rechnungen aus Verträgen anhand von `BillingIntervalKind`/`BillingIntervalDuration`; die Legacy-Tabelle `VertragKopf` führt das Feld `Automatische Abrechnung`.
|
||||
Aussage: Das System soll wiederkehrende Verträge (Wartungs-/Servicevereinbarungen) gemäß konfiguriertem Abrechnungsintervall automatisiert und ohne manuelles Zutun fakturieren.
|
||||
Ergebnis: Zum fälligen Termin wird eine Rechnung mit den Vertragspositionen erzeugt und das Vertrags-Abrechnungsdatum fortgeschrieben.
|
||||
Belege:
|
||||
- [PRIMÄR] src/backend/Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.Contracts.cs - Begründung: Klasse implementiert konkret die automatisierte Rechnungserzeugung aus Vertragsdaten (durchsetzende Stelle für Fakturierungslogik).
|
||||
- [SEKUNDÄR] docs/reference/receipts/contracts-backend.md, Abschnitt "Automated Billing Process" - Begründung: Beschreibt den dreistufigen Ablauf (Evaluation, Invoice Generation, Post-Processing) und benennt die zugehörige Klasse; deckt sich mit dem referenzierten Quellcode.
|
||||
- [KONTEXT] src/backend/Centron.Entities (Tabellenspalte `Automatische Abrechnung` in VertragKopf, laut Dokumentation) - Begründung: Bestätigt das Feature als persistiertes Kennzeichen je Vertrag.
|
||||
Prüfidee: Ein Testvertrag mit monatlichem Intervall und aktivem Automatik-Kennzeichen muss nach Ablauf des Intervalls automatisch eine Rechnung erzeugen; Deaktivierung des Kennzeichens darf keine Rechnung erzeugen.
|
||||
Tracelinks: SyRS-014, SyRS-015
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Automatisierte Abrechnung ist zentrales Umsatzsicherungsmerkmal für wiederkehrende Erlöse (MSP-Geschäftsmodell).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-014
|
||||
Titel: Mahnwesen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter
|
||||
Vorbedingung: Offene, überfällige Rechnungen oder Gutschriften eines Kunden liegen vor.
|
||||
Fakt: `DunningItemType` unterscheidet `Invoice`/`CreditVoucher`; `DunningRunForCustomerState` bildet einen Zustandsautomaten `None → Declined/Accepted → Processing → Success/Failure` für den Mahnlauf je Kunde ab.
|
||||
Aussage: Das System soll überfällige Forderungen je Kunde erfassen, einen kontrollierten Mahnlauf (mit Freigabe-/Ablehnungsschritt) durchführen und dessen Ergebnis nachvollziehbar protokollieren.
|
||||
Ergebnis: Ein Mahnlauf durchläuft den Zustand konsistent bis `Success` oder `Failure`; abgelehnte Mahnläufe (`Declined`) werden nicht weiterverarbeitet.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Finances/Dunning/Common/DunningRunForCustomerState.cs:3-11 - Begründung: Der Enum-Zustandsautomat selbst ist die im Code verankerte Geschäftsregel für den zulässigen Ablauf eines Mahnlaufs.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Finances/Dunning/Common/DunningItemType.cs - Begründung: Bestätigt, dass sowohl Rechnungen als auch Gutschriften Gegenstand des Mahnwesens sind.
|
||||
Prüfidee: Ein Mahnlauf im Zustand `Declined` darf nicht in `Processing` übergehen (State-Machine-Transitionstest).
|
||||
Tracelinks: SyRS-016
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Mahnwesen ist Kernfunktion der Debitorenbuchhaltung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-015
|
||||
Titel: Benutzerdefinierte Zusatzfelder je Modul
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator
|
||||
Vorbedingung: Ein Standardobjekt (z. B. Kunde, Beleg) deckt einen kundenspezifischen Informationsbedarf nicht ab.
|
||||
Fakt: `CustomPropertiesConnector` liest/schreibt `ModuleCustomPropertyDTO`/`ModuleCustomPropertyValueDTO` je `CentronObjectKindNumeric` und Objekt-I3D über `ICustomPropertiesLogic`.
|
||||
Aussage: Das System soll es Administratoren erlauben, für Standardobjekte zusätzliche, frei definierbare Datenfelder anzulegen und deren Werte je Datensatz zu pflegen.
|
||||
Ergebnis: Ein neu definiertes Zusatzfeld steht für alle Datensätze des betroffenen Objekttyps zur Werteerfassung zur Verfügung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Global/CustomProperties/CustomPropertiesConnector.cs:24-44 - Begründung: Konkrete CRUD-Methoden (`GetModuleCustomProperties`, `SaveModuleCustomProperties`, `RemoveProperties`) belegen die generische Zusatzfeld-Verwaltung je Objektart.
|
||||
Prüfidee: Anlegen eines Zusatzfelds für Objektart „Kunde“, Erfassen eines Werts bei einem Testkunden, Prüfung dass der Wert persistiert und beim erneuten Laden angezeigt wird.
|
||||
Tracelinks: SyRS-017
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Individualisierbarkeit ohne Codeänderung ist zentrales Anpassungsmerkmal für ein Multi-Kunden-ERP.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-016
|
||||
Titel: Personalisierbare Benutzeroberflächenprofile
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter (Anwender), Administrator
|
||||
Vorbedingung: Der Anwender hat individuelle Anpassungen an Masken/Layouts vorgenommen.
|
||||
Fakt: `ManageUiProfileViewModel` unterscheidet `IsPublic`/`IsPrivate`-Profile; das Anlegen öffentlicher Profile ist an das Recht `UserRightsConst.Administration.EDIT_GLOBAL_PROFILES` gebunden (`CanCreatePrivateProfiles`-Property wertet `CentronCache.Instance.CurrentUserAppRights` aus).
|
||||
Aussage: Das System soll es Anwendern erlauben, UI-Layoutprofile zu speichern und wahlweise nur für sich selbst (privat) oder rechtegeschützt für alle Benutzer (öffentlich) freizugeben.
|
||||
Ergebnis: Private Profile sind nur für den erstellenden Benutzer sichtbar; öffentliche Profile lassen sich nur mit dem entsprechenden Recht anlegen/bearbeiten.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Gui/Profiles/ManageUiProfileViewModel.cs:19-26 - Begründung: Zeigt die konkrete Rechteprüfung `CanCreatePrivateProfiles = CentronCache.Instance.CurrentUserAppRights.Any(f => f.I3D == UserRightsConst.Administration.EDIT_GLOBAL_PROFILES)` als durchsetzende Stelle für die Sichtbarkeitssteuerung.
|
||||
Prüfidee: Ein Benutzer ohne `EDIT_GLOBAL_PROFILES` darf kein öffentliches Profil anlegen können (UI-Steuerelement gesperrt/verborgen).
|
||||
Tracelinks: SyRS-018
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Individuelle Arbeitsplatzanpassung ist ein etabliertes Usability-Merkmal in ERP-Clients.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-017
|
||||
Titel: Ticketverwaltung mit Gruppierung nach Verbindungsnummer
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Support-Mitarbeiter
|
||||
Vorbedingung: Ein Kunde hat mehrere technische Anschlüsse/Verbindungen (z. B. Telefon-/Datenanschlüsse), zu denen Tickets erfasst werden.
|
||||
Fakt: `HelpdeskConnectionNumberGroupViewModel` gruppiert Tickets nach `HelpdeskConnectionNumberGroupDTO` und zeigt `HasActiveHelpdesks` anhand von `ActiveHelpdeskCount != 0`.
|
||||
Aussage: Das System soll Support-Tickets nach der betroffenen Verbindungsnummer eines Kunden gruppieren und auf einen Blick anzeigen, ob zu einer Verbindungsnummer aktive Tickets bestehen.
|
||||
Ergebnis: Support-Mitarbeiter sehen je Verbindungsnummer, ob offene Vorgänge existieren, ohne jedes Ticket einzeln zu durchsuchen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Helpdesk/ConnectionNumber/HelpdeskConnectionNumberGroupViewModel.cs:17-31 - Begründung: Konkrete Berechnung `HasActiveHelpdesks = item.ActiveHelpdeskCount != 0` im Konstruktor belegt die Ableitungslogik direkt.
|
||||
Prüfidee: Eine Verbindungsnummer mit mindestens einem offenen Ticket muss `HasActiveHelpdesks = true` liefern, eine ohne offene Tickets `false`.
|
||||
Tracelinks: SyRS-019
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Branchenspezifisch (Telekommunikations-/Systemhaus-Kontext), fachlich weiterhin relevant für Kunden mit mehreren Anschlüssen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-018
|
||||
Titel: Kommissionierungs- und Versandbenachrichtigungseinstellungen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lagerleiter, Administrator
|
||||
Vorbedingung: Ein Lieferauftrag wird kommissioniert und ggf. teilkommissioniert.
|
||||
Fakt: `LogisticSettingsViewModel` bietet u. a. `_sendEmailOnlyWhenFullyCommissioned`, `_sendCommissionEmailWhenDirectDelivery`, `_useCustomCommissionEmailRecipients` sowie `_isTargetStorageMandatory` und `_rebookStorage`.
|
||||
Aussage: Das System soll konfigurierbar steuern, wann (voll- oder teilkommissioniert) und an wen Kommissionierungs-/Versandbenachrichtigungen gesendet werden, sowie ob ein Ziellager bei Umbuchungen verpflichtend anzugeben ist.
|
||||
Ergebnis: E-Mail-Benachrichtigungen werden nur unter den konfigurierten Bedingungen versendet; bei aktivierter Pflicht wird eine Umbuchung ohne Ziellager verhindert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Logistic/LogisticSettings/LogisticSettingsViewModel.cs:23-42 - Begründung: Vollständige Liste der Konfigurationsfelder mit sprechenden Namen belegt die steuerbaren Bedingungen unmittelbar im Code.
|
||||
Prüfidee: Bei aktivierter Option „nur bei Vollkommissionierung“ darf bei einer Teilkommissionierung keine E-Mail versendet werden.
|
||||
Tracelinks: SyRS-020
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Prozesssteuerung der Versandkommunikation ist für die Kundenerfahrung im Logistikprozess relevant.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-019
|
||||
Titel: Anbindung an Versanddienstleister (GLS, Shipcloud)
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Lagerleiter, System (Versanddienstleister-API)
|
||||
Vorbedingung: Eine Lieferung ist versandfertig kommissioniert.
|
||||
Fakt: `CentronGlsLogic`/`CentronGlsConsts`/`CentronGlsErrors` sowie `CentronShipcloudLogic`/`CentronShipcloudConsts` bilden dedizierte API-Clients für zwei unterschiedliche Versanddienstleister.
|
||||
Aussage: Das System soll Versandaufträge und Sendungsverfolgung direkt an die APIs der Versanddienstleister GLS und Shipcloud übermitteln können.
|
||||
Ergebnis: Für eine versandfertige Lieferung wird ein Versandlabel/eine Sendungsnummer beim gewählten Dienstleister erzeugt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/Centron.Api.Gls/CentronGlsLogic.cs, src/apis/Centron.Api.Shipcloud/CentronShipcloudLogic.cs (Klassennamen/Struktur) - Begründung: Eigenständige Logic-Klassen je Versanddienstleister belegen konkrete, getrennte API-Integrationen.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Logistic/ShippingMethodSettings - Begründung: UI-Untermodul zur Konfiguration der Versandmethoden bestätigt die fachliche Anbindung.
|
||||
Prüfidee: Erstellen eines Testversands über die GLS-Integration liefert eine gültige Sendungsnummer im erwarteten Format zurück.
|
||||
Tracelinks: SyRS-021
|
||||
Konsolidierung: Kandidat: Zwei parallele, versanddienstleisterspezifische Implementierungen (`CentronGlsLogic`, `CentronShipcloudLogic`) ohne erkennbare gemeinsame Abstraktionsschicht - im Zielsystem zu einem einheitlichen Versand-Adapter-Konzept zusammenführbar.
|
||||
Übernahmewürdigkeit: übernehmen - Direkte Versanddienstleister-Integration ist Standardanforderung an ein modernes ERP/Warenwirtschaftssystem.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-020
|
||||
Titel: Massenhafte Datenänderungen über Vorlagen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, Vertriebsinnendienst
|
||||
Vorbedingung: Eine größere Anzahl gleichartiger Datensätze (z. B. Artikelpreise) soll einheitlich geändert werden.
|
||||
Fakt: `MassUpdatesViewModel` verwaltet `MassUpdateTemplateDTO`-Vorlagen mit Aktiv-/Inaktiv-Status (`ShowInactive`) und referenziert spezialisierte Preisupdate-Assistenten (`PriceUpdates/ArticleUpdate`).
|
||||
Aussage: Das System soll wiederverwendbare Vorlagen für Massenänderungen (u. a. Preisanpassungen) bereitstellen, die sich aktivieren/deaktivieren und wiederholt ausführen lassen.
|
||||
Ergebnis: Eine gespeicherte Massenupdate-Vorlage kann erneut ausgeführt werden, ohne die Änderungslogik neu zu konfigurieren.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Massenupdates/MassUpdatesViewModel.cs:36-60 - Begründung: Konkrete Verwaltung von `PendingMassUpdates`/`AllMassUpdateTemplates` mit Aktiv-Filterung belegt die Vorlagenverwaltung im Code.
|
||||
Prüfidee: Eine als inaktiv markierte Vorlage darf bei `ShowInactive = false` nicht in der Liste `PendingMassUpdates` erscheinen.
|
||||
Tracelinks: SyRS-022
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Effizienzfunktion für wiederkehrende Bulk-Operationen bleibt im Zielsystem relevant.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-021
|
||||
Titel: Automatisierte Datenqualitätsprüfungen (Inspektoren)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, Datenverantwortlicher
|
||||
Vorbedingung: Fachliche Pflichtfeldregeln (z. B. Kostenstellenpflicht) sind aktiviert.
|
||||
Fakt: `CostCentreMandatoryCheck` (Inspector) führt bei aktivierter Einstellung `CostCenterIsMandatory` eine direkte SQL-Abfrage gegen `dbo.ARTIK` aus, um Artikel ohne gesetzte Kostenstelle zu identifizieren.
|
||||
Aussage: Das System soll über automatisierte Prüfroutinen („Inspektoren“) Verstöße gegen fachliche Datenintegritätsregeln (z. B. fehlende Pflichtangaben) erkennen und auflisten.
|
||||
Ergebnis: Bei aktivierter Pflichtfeldregel liefert der Inspektor die Liste der Artikel, die die Regel verletzen; bei deaktivierter Regel wird die Prüfung übersprungen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/MyCentron/CentronInspectors/Inspectors/Article/CostCentreMandatoryCheck.cs:23-44 - Begründung: Enthält das konkrete SQL-Statement und die Bedingungsprüfung (`articleSettings.CostCenterIsMandatory`), die die Regel technisch durchsetzt.
|
||||
Prüfidee: Bei aktivierter Kostenstellenpflicht muss ein Testartikel ohne Kostenstelle im Prüfergebnis erscheinen; nach Zuweisung einer Kostenstelle nicht mehr.
|
||||
Tracelinks: SyRS-023
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Automatisierte Datenqualitätssicherung ist auch im Zielsystem sinnvoll, idealerweise als präventive statt nachgelagerte Prüfung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-022
|
||||
Titel: Abgleich unbekannter Bankverbindungen im Zahlungsverkehr
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter
|
||||
Vorbedingung: Kontoumsätze wurden über die Online-Banking-Schnittstelle (FinAPI) abgerufen.
|
||||
Fakt: `CheckForUnknownIbanViewModel` bietet einen mehrstufigen Assistenten (`SearchUnknownIbanPageViewModel`, `CreateBankConnectionsPageViewModel`) zum Abgleich von IBANs aus Kontoumsätzen gegen bekannte Bankverbindungen.
|
||||
Aussage: Das System soll eingehende Zahlungen automatisiert auf unbekannte, dem Kunden noch nicht zugeordnete IBANs prüfen und dem Anwender einen geführten Prozess zur Zuordnung/Anlage neuer Bankverbindungen anbieten.
|
||||
Ergebnis: Zahlungen von bislang unbekannten IBANs werden erkannt und können gezielt einem Kunden zugeordnet werden, statt automatisiert falsch verbucht zu werden.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/OnlineBanking/AccountTransactions/CheckForUnknownIban/CheckForUnknownIbanViewModel.cs:26-52 - Begründung: Der mehrseitige Assistent mit dediziertem Such- und Anlage-Schritt belegt den konkreten Prüf-/Zuordnungsprozess.
|
||||
- [SEKUNDÄR] src/apis/Centron.APIs.FinAPI/IFinApiClient.cs - Begründung: Bestätigt die technische Grundlage (FinAPI-Kontodatenabruf), auf der der IBAN-Abgleich aufsetzt.
|
||||
Prüfidee: Import eines Kontoumsatzes mit einer im System nicht hinterlegten IBAN muss den Assistenten zur manuellen Zuordnung anstoßen statt die Zahlung automatisch fehlzuverbuchen.
|
||||
Tracelinks: SyRS-024
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Vermeidung von Fehlzuordnungen bei Zahlungseingängen ist ein wesentliches Kontrollmerkmal der Debitorenbuchhaltung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-023
|
||||
Titel: Produktlebenszyklusverwaltung (PLM)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Produktmanager
|
||||
Vorbedingung: Ein Artikel/eine Produktfamilie durchläuft definierte Lebenszyklusphasen.
|
||||
Fakt: `PlmAppModuleController` (`Modules/PLM`) referenziert `Modules/Finances/ProductLifecycleManagement/Settings`; es existiert somit ein PLM-Hauptmodul, dessen Einstellungen fachlich im Finances-Zweig verortet sind. `ProductFamilyViewModel`/`ProductFamilyGroupViewModel` bilden Produktfamilien und -gruppen ab.
|
||||
Aussage: Das System soll Artikel zu Produktfamilien gruppieren und deren Lebenszyklusstatus (u. a. für Nachfolgeplanung) verwalten können.
|
||||
Ergebnis: Ein Artikel ist einer Produktfamilie zugeordnet; der Lebenszyklusstatus der Familie ist zentral einsehbar und pflegbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/PLM/PlmAppModuleController.cs:6, 17-19 - Begründung: Modulname „PLM (Lifecycle)“ und Verweis auf `Finances.ProductLifecycleManagement.Settings` belegen die Funktion und zugleich die Verteilung über zwei Modulbäume.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/PLM/ProductFamilyViewModel.cs, ProductFamilyGroupViewModel.cs - Begründung: Konkrete Datenklassen für Produktfamilien/-gruppen.
|
||||
Prüfidee: Anlegen einer Produktfamilie, Zuordnung eines Artikels, Prüfung dass der Lebenszyklusstatus der Familie am Artikel sichtbar ist.
|
||||
Tracelinks: SyRS-025
|
||||
Konsolidierung: Kandidat: `Modules/PLM` (Hauptmodul) und `Modules/Finances/ProductLifecycleManagement` (Einstellungen) sind derselbe fachliche Gegenstand, aber in getrennten Modulbäumen verortet - im Zielsystem unter einem einzigen PLM-Bereich zusammenzuführen.
|
||||
Übernahmewürdigkeit: übernehmen - Lebenszyklusmanagement ist im Produktgeschäft (insb. IT-Handel/MSP) fachlich weiterhin relevant.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-024
|
||||
Titel: Passwortrichtlinien im Passwort-Manager
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, Mitarbeiter (Anwender)
|
||||
Vorbedingung: Das Modul „Passwort-Manager“ ist lizenziert.
|
||||
Fakt: `GuidelineManagementAppModuleController` ("Richtlinienverwaltung") stellt ein eigenständiges Modul zur „Verwaltung für die Richtlinien des Passwort Manager“ bereit, getrennt von der reinen Zugangsverwaltung (`AccessManagementAppModuleController`, `AccessAreaManagementAppModuleController`).
|
||||
Aussage: Das System soll es Administratoren erlauben, Richtlinien für im Passwort-Manager gespeicherte Zugangsdaten zentral zu definieren und deren Einhaltung zu unterstützen.
|
||||
Ergebnis: Im Passwort-Manager gespeicherte Einträge lassen sich anhand definierter Richtlinien organisieren/prüfen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/PasswordManager/GuidelineManagementAppModuleController.cs:20-38 - Begründung: Modulname und Beschreibung im Code belegen unmittelbar die Richtlinienverwaltungsfunktion; Verdrahtung mit `GuidelineManagementViewModel` zeigt konkrete Umsetzung.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/PasswordManager/AccessManagementAppModuleController.cs, AccessAreaManagementAppModuleController.cs - Begründung: Getrennte Module für Zugriffsbereiche und Zugriffsrechte bestätigen ein mehrstufiges Berechtigungskonzept rund um den Passwort-Manager.
|
||||
Prüfidee: Anlegen einer Richtlinie und Prüfung, dass neu angelegte Zugangsdaten-Einträge dieser Richtlinie zugeordnet werden können.
|
||||
Tracelinks: SyRS-026
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Zentrale Passwortverwaltung mit Richtlinien ist sicherheitsrelevant und im SaaS-Zielsystem auszubauen (z. B. Komplexitätsvorgaben technisch erzwingen).
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-025
|
||||
Titel: Kostenträger- und Kostenstellenverwaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Controller, Buchhalter
|
||||
Vorbedingung: Kosten sollen nach internen Organisationseinheiten (Kostenstellen) oder Projekten (Kostenträger) ausgewertet werden.
|
||||
Fakt: `PayersAndCostCenterAppModuleController` beschreibt das Modul als „Erstellung und Verwaltung von Kostenträger / Kostenstellen“, Kategorie `BaseData`.
|
||||
Aussage: Das System soll Kostenträger und Kostenstellen als eigenständige Stammdatenobjekte verwalten und Belegen/Buchungen zuordnen können.
|
||||
Ergebnis: Buchungen lassen sich nach Kostenstelle/Kostenträger auswerten.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter/PayersAndCostCenterAppModuleController.cs:14-21 - Begründung: Modulname, Beschreibung und Kategorie „BaseData“ direkt im Code belegen den Stammdatencharakter der Funktion.
|
||||
Prüfidee: Anlegen einer Kostenstelle, Zuordnung zu einem Testbeleg, Prüfung der Auswertbarkeit in einer kostenstellenbezogenen Auswertung.
|
||||
Tracelinks: SyRS-027
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kostenstellenrechnung ist Standardbestandteil betriebswirtschaftlicher ERP-Funktionalität.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-026
|
||||
Titel: Erstellung von Produktionsaufträgen aus Verkaufsaufträgen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Produktionsplaner
|
||||
Vorbedingung: Ein Verkaufsauftrag enthält produktionsrelevante Artikel.
|
||||
Fakt: `AddProductionOrderViewModel` verknüpft `OrdersWithProductionArticles`/`ReceiptOrderItemDTO` mit einer geplanten Fertigstellung (`_plannedFinishDate`) zur Erstellung eines Produktionsauftrags.
|
||||
Aussage: Das System soll aus Positionen eines Verkaufsauftrags gezielt Produktionsaufträge mit geplantem Fertigstellungstermin erzeugen können.
|
||||
Ergebnis: Ein neuer Produktionsauftrag ist mit den referenzierten Auftragspositionen und dem Plantermin angelegt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Production/ProductionOrder/AddProductionOrder/AddProductionOrderViewModel.cs:28-36 - Begründung: Direkte Verknüpfung von Verkaufsauftragspositionen mit Produktionsauftragsfeldern (inkl. Plantermin) im Code.
|
||||
Prüfidee: Auswahl einer produktionsrelevanten Auftragsposition und Erstellen eines Produktionsauftrags; Prüfung, dass Menge/Artikel korrekt übernommen werden.
|
||||
Tracelinks: SyRS-028
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Verzahnung von Vertrieb und Fertigung ist für produzierende Kunden fachlich erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-027
|
||||
Titel: Interne Projektübersicht (Sonderfall NEXOWARE)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter der NEXOWARE Systems GmbH
|
||||
Vorbedingung: -
|
||||
Fakt: `ProjectManagementAppModuleController.Description` lautet wörtlich: „Übersicht über die Entwicklungsprojekte. Aktuell nur intern für NEXOWARE Systems GmbH“.
|
||||
Aussage: Das System soll (im Ist-Zustand) eine Übersicht über interne Entwicklungsprojekte bieten, die explizit nur für den Softwarehersteller selbst bestimmt ist, nicht für Endkunden.
|
||||
Ergebnis: Das Modul ist funktional nutzbar, aber laut Beschreibung nicht Teil des allgemeinen Kundenfunktionsumfangs.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ProjectManagement/ProjectManagementAppModuleController.cs:19 - Begründung: Wörtliches Zitat der Modulbeschreibung im Code ist unmittelbarer Beleg für die interne Zweckbindung.
|
||||
Prüfidee: Entfällt für Kundenbetrieb; für Zielsystem zu klären, ob Funktion überhaupt migriert werden soll (siehe Übernahmewürdigkeit).
|
||||
Tracelinks: SyRS-029
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Sonderfall - Laut eigener Beschreibung im Code nur für den Hersteller selbst bestimmt, kein allgemeingültiges Kundenfeature; Migrationsentscheidung separat zu treffen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-028
|
||||
Titel: Abgleich von Sonderkonditionen beim Projektpreis-Import
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsinnendienst
|
||||
Vorbedingung: Eine externe Preisliste (z. B. vom Lieferanten) wird für ein Projekt importiert.
|
||||
Fakt: `DifferenceViewModel`/`SpecialAgreementDifferenceViewModel` ermitteln Abweichungen zwischen importierten Preisen und bestehenden kundenspezifischen Sonderkonditionen und bieten einen `SendMailCommand` zur Benachrichtigung.
|
||||
Aussage: Das System soll beim Import externer Projektpreislisten automatisch Abweichungen zu bestehenden kundenspezifischen Sonderkonditionen erkennen und dem Anwender zur Entscheidung/Benachrichtigung vorlegen.
|
||||
Ergebnis: Abweichende Positionen werden aufgelistet; der Anwender kann eine Benachrichtigung (z. B. an den Kunden) auslösen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference/DifferenceViewModel.cs:22-36 - Begründung: Konkrete Verknüpfung von Preisdifferenzen mit Kunden-Sonderkonditionen (`_customerToSelectedSpecialAgreement`) und Benachrichtigungsfunktion im Code.
|
||||
Prüfidee: Import einer Preisliste mit einer vom Sonderkonditionspreis abweichenden Position muss diese Position in `Differences` auflisten.
|
||||
Tracelinks: SyRS-030
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Automatisierte Preisdifferenzprüfung reduziert manuelle Fehlerquellen bei Projektgeschäften.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-029
|
||||
Titel: EDI-gestützte Bestellabwicklung
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Einkäufer
|
||||
Vorbedingung: Ein Lieferant unterstützt den elektronischen Austausch von Lieferschein-/Rechnungsdaten (EDI).
|
||||
Fakt: `EDIManagementViewModel` verwaltet Verarbeitungsstatus (`_opened`, `_ignored`, `_processed`) für eingehende EDI-Nachrichten unterschiedlichen Typs (Lieferung, Rechnung, Gutschrift) und prüft rechteabhängig, ob daraus neue Belege (`_isNewDeliveryRight`, `_isNewInvoiceRight`) erzeugt werden dürfen. `Centron.Gateway` enthält zusätzlich formatspezifische Konnektoren (u. a. `EDI_Alltron`).
|
||||
Aussage: Das System soll eingehende EDI-Nachrichten von Lieferanten (Lieferscheine, Rechnungen, Gutschriften) erfassen, deren Bearbeitungsstatus nachverfolgen und rechtegeschützt in Belege des Systems überführen.
|
||||
Ergebnis: Eine EDI-Nachricht wechselt kontrolliert von „offen“ zu „verarbeitet“ oder „ignoriert“; die Beleganlage erfolgt nur mit dem passenden Recht.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Purchasing/EDIManagement/EDIManagementAppViewModel.cs:32-45 - Begründung: Konkrete Statusfelder und rechteabhängige Flags für die Belegerzeugung belegen den kontrollierten Verarbeitungsprozess.
|
||||
- [SEKUNDÄR] src/backend/Centron.Gateway/EDI_Alltron - Begründung: Lieferantenspezifischer EDI-Konnektor bestätigt die technische Umsetzung des Datenaustauschformats.
|
||||
Prüfidee: Eine EDI-Lieferschein-Nachricht ohne das Recht `_isNewDeliveryRight` darf keinen Lieferschein im System erzeugen können.
|
||||
Tracelinks: SyRS-031
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - EDI-Anbindung an Lieferanten ist Standardanforderung im Großhandels-/IT-Distributionsgeschäft.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-030
|
||||
Titel: Produktdatenabgleich mit Lieferantenkatalogen
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Einkäufer, Produktdatenpfleger
|
||||
Vorbedingung: Ein Artikel soll mit aktuellen Herstellerdaten (Bild, Beschreibung, Preis) angereichert werden.
|
||||
Fakt: Eigenständige API-Projekte `Centron.APIs.CopDataAccess`, `Centron.APIs.EgisDataAccess`, `Centron.APIs.ITscopeDataAccess`, `Centron.APIs.IcecatDataAccess` bilden je einen Datenlieferanten für Produktdaten ab.
|
||||
Aussage: Das System soll Artikelstammdaten automatisiert mit Produktdaten aus mehreren externen Katalogdiensten (u. a. ITscope, Icecat) abgleichen bzw. anreichern können.
|
||||
Ergebnis: Ein Artikel erhält aktualisierte Katalogdaten aus der angebundenen externen Quelle, ohne manuelle Doppelerfassung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/apis/Centron.APIs.ITscopeDataAccess, src/apis/Centron.APIs.IcecatDataAccess, src/apis/Centron.APIs.CopDataAccess, src/apis/Centron.APIs.EgisDataAccess (Projektstruktur) - Begründung: Vier eigenständige, nach Datenlieferant benannte API-Projekte belegen die tatsächliche Mehrfachanbindung im Code.
|
||||
Prüfidee: Abruf eines Testartikels über eine der Schnittstellen liefert strukturierte Produktdaten (Titel, Beschreibung) im erwarteten DTO-Format zurück.
|
||||
Tracelinks: SyRS-032
|
||||
Konsolidierung: Kandidat: Vier eigenständige, weitgehend gleichartige Katalog-Anbindungen (Cop, Egis, ITscope, Icecat) ohne erkennbare gemeinsame Abstraktion - im Zielsystem auf ein einheitliches Produktdaten-Provider-Interface konsolidierbar.
|
||||
Übernahmewürdigkeit: übernehmen - Externe Produktdatenanreicherung ist im IT-Fachhandel eine zentrale Effizienzfunktion.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-031
|
||||
Titel: Konfigurierbare Rückgabe- und Gutschriftgründe
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Qualitätsmanager, Sachbearbeiter
|
||||
Vorbedingung: Ein Beleg (Lieferschein, Rechnung, Gutschrift, Bestellung) wird storniert/zurückgenommen.
|
||||
Fakt: `QmSettingsViewModel` verwaltet je Belegart (Lieferantenbestellung, Lieferantengutschrift, Lieferantenlieferschein, Lieferantenrechnung, Abholliste, Kundengutschrift, Kundenlieferschein) eine eigene `AssetReasonSettingsViewModel`-Instanz zur Pflege zulässiger Gründe.
|
||||
Aussage: Das System soll für jede relevante Belegart eigene, konfigurierbare Grund-Kataloge (z. B. für Rücknahmen/Gutschriften) bereitstellen, die bei der Bearbeitung verpflichtend auszuwählen sind.
|
||||
Ergebnis: Rücknahmen/Gutschriften sind mit einem aus dem belegartspezifischen Katalog gewählten Grund dokumentiert.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/QM/Settings/QmSettingsViewModel.cs:11-47 - Begründung: Sieben separate, klar benannte Grund-Einstellungsobjekte je Belegart belegen die granulare, belegartspezifische Konfigurierbarkeit unmittelbar im Code.
|
||||
Prüfidee: Anlegen eines neuen Rückgabegrunds für „Kundenlieferschein“ muss ausschließlich bei dieser Belegart zur Auswahl stehen, nicht bei anderen.
|
||||
Tracelinks: SyRS-033
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Strukturierte Grunderfassung unterstützt Qualitäts-/Reklamationsauswertungen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-032
|
||||
Titel: Zentrale Reportverwaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, Fachanwender
|
||||
Vorbedingung: Berichte (Reports) sollen unternehmensweit konsistent erstellt und verteilt werden.
|
||||
Fakt: `ReportEngineAppModuleController` beschreibt das Modul als „Erstellen, Bearbeiten und Verwalten von Reports“, Kategorie `BaseData`; Untermodul `Query` erlaubt Abfrage-basierte Reports.
|
||||
Aussage: Das System soll die zentrale Erstellung, Pflege und Ausführung von Berichten inkl. abfragebasierter Sonderreports ermöglichen.
|
||||
Ergebnis: Ein neu erstellter Report steht den berechtigten Anwendern zur Ausführung zur Verfügung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Reports/ReportManagement/ReportEngineAppModuleController.cs:13-21 - Begründung: Modulbeschreibung direkt im Code belegt Kernfunktion.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Reports/ReportManagement/Query - Begründung: Eigenständiges Untermodul für abfragebasierte Reports bestätigt erweiterten Funktionsumfang.
|
||||
Prüfidee: Erstellen eines einfachen Reports und Ausführung durch einen Testbenutzer mit entsprechendem Recht liefert das erwartete Ergebnisformat.
|
||||
Tracelinks: SyRS-034
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Zentrales Berichtswesen ist Kernfunktion jedes ERP-Systems.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-033
|
||||
Titel: Retourenabwicklung (RMA) für Kunden- und Eigenware
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Sachbearbeiter, Kunde
|
||||
Vorbedingung: Eine Ware soll zurückgenommen oder zur Reparatur eingeschickt werden.
|
||||
Fakt: `NewRmaSummaryPageViewModel.RmaKindToDisplayText` unterscheidet explizit `RmaKind.CustomerRma` ("Kundenware") und `RmaKind.OwnRma` ("Eigenware") als zwei verschiedene RMA-Arten in einem gemeinsamen Assistenten.
|
||||
Aussage: Das System soll die Rücknahme sowohl von Kundenware als auch von eigener Ware über einen geführten Assistenten mit Artikelauswahl und Zusammenfassung abwickeln.
|
||||
Ergebnis: Eine RMA-Vorgang ist mit korrekt zugeordneter RMA-Art, ausgewählten Artikeln und Zusammenfassung angelegt.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Rma/NewRma/Pages/NewRmaSummaryPageViewModel.cs:26-37 - Begründung: Konkrete Fallunterscheidung der beiden RMA-Arten im Code.
|
||||
- [SEKUNDÄR] src/centron/Centron.WPF.UI/Modules/Rma/SendBack, SendForth - Begründung: Getrennte Untermodule für Rückversand (SendBack) und Weiterversand (SendForth) bestätigen den mehrstufigen Retourenprozess.
|
||||
Prüfidee: Anlegen einer RMA vom Typ „Kundenware“ und Prüfung, dass die Zusammenfassungsseite korrekt „Kundenware“ anzeigt.
|
||||
Tracelinks: SyRS-035
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Strukturierte Retourenabwicklung ist Standardprozess im Handels-/Servicegeschäft.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-034
|
||||
Titel: Kundenspezifische Produktmatrix
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsmitarbeiter
|
||||
Vorbedingung: Für einen Kunden ist eine feste Auswahl freigegebener/bevorzugter Artikel zu pflegen.
|
||||
Fakt: `ProductMatrixDialogViewModel` bindet eine `ProductMatrixCustomerViewModel` in den CRM-Hauptbereich (`CrmMainViewModel`) ein.
|
||||
Aussage: Das System soll es erlauben, für einen Kunden eine individuelle Produktmatrix (freigegebene/empfohlene Artikel) zu pflegen und im Vertriebskontext direkt einsehbar zu machen.
|
||||
Ergebnis: Im Kundenkontext ist die kundenspezifische Produktmatrix ohne separate Suche einsehbar.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Sales/ProductMatrix/ProductMatrixDialogViewModel.cs:15-29 - Begründung: Direkte Einbindung der Produktmatrix in den CRM-Kundenkontext im Code.
|
||||
Prüfidee: Pflege einer Produktmatrix für einen Testkunden und Prüfung, dass sie beim Öffnen des Kundendatensatzes im CRM sichtbar ist.
|
||||
Tracelinks: SyRS-036
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kundenindividuelle Sortimentssteuerung unterstützt zielgerichteten Vertrieb.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-035
|
||||
Titel: Auswertung der Mitarbeiterauslastung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Führungskraft, Controller
|
||||
Vorbedingung: Mitarbeiter erfassen Zeiten/Leistungen im System.
|
||||
Fakt: `EmployeeAnalyticsAppModuleController` beschreibt das Modul „Leistungsnachweise“ mit dem Zweck „Darstellung der Mitarbeiterauslastung“, Kategorie `Controlling`.
|
||||
Aussage: Das System soll die Auslastung von Mitarbeitern auf Basis erfasster Leistungsnachweise auswerten und für Controlling-Zwecke darstellen.
|
||||
Ergebnis: Eine Führungskraft kann die Auslastung eines Mitarbeiters/Teams über einen Zeitraum einsehen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Statistics/EmployeeAnalytics/EmployeeAnalyticsAppModuleController.cs:18-22 - Begründung: Modulbeschreibung und Controlling-Kategorie im Code belegen unmittelbar den Auswertungszweck.
|
||||
Prüfidee: Erfassung von Testzeiten für einen Mitarbeiter, Prüfung dass die Auslastungsauswertung die erfassten Zeiten korrekt aggregiert.
|
||||
Tracelinks: SyRS-037
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Leistungscontrolling ist im Dienstleistungsgeschäft (Systemhaus) fachlich zentral.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-036
|
||||
Titel: Auswertung von Umfragen
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Marketing-/Qualitätsverantwortlicher
|
||||
Vorbedingung: Eine Umfrage wurde an Kunden/Kontakte versendet und teilweise beantwortet.
|
||||
Fakt: `SurveyAnalyseViewModel` aggregiert Kennzahlen `_countTemplates`, `_countTemplatesCanceld`, `_countTemplatesOpen`, `_countTemplatesFinisched` je Umfragevorlage.
|
||||
Aussage: Das System soll den Rücklauf einer Umfrage (offen, abgeschlossen, abgebrochen) quantitativ auswerten und darstellen.
|
||||
Ergebnis: Der Anwender sieht auf einen Blick, wie viele Umfrageinstanzen offen, abgeschlossen bzw. abgebrochen sind.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Survey/Pages/Analyse/SurveyAnalyseViewModel.cs:33-39 - Begründung: Konkrete Zählvariablen für die vier Status direkt im Code.
|
||||
Prüfidee: Drei Testinstanzen einer Umfrage in unterschiedlichen Status anlegen; Auswertung muss die Zähler korrekt widerspiegeln.
|
||||
Tracelinks: SyRS-038
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Rücklaufauswertung ist Kernnutzen jeder Umfragefunktion.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-037
|
||||
Titel: Export von Angebotsdaten an die Telekom-DIVE-Plattform
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Vertriebsmitarbeiter (Telekom-Partner)
|
||||
Vorbedingung: Ein Angebot enthält Telekom-relevante Positionen, die über DIVE gemeldet werden müssen.
|
||||
Fakt: `TelekomDiveExportViewModel` sammelt `DiveExportData` je Angebot (`ReceiptOfferDTO`) inkl. Distributor-Zuordnung (`TelekomDiveDistributorViewModel`) und exportiert diese in ein XML/Dateiformat (`System.Xml.Linq`).
|
||||
Aussage: Das System soll Angebotspositionen mit den für den Telekom-Partnervertrieb erforderlichen Zusatzdaten (u. a. Distributor) in einem für die DIVE-Plattform verwertbaren Format exportieren.
|
||||
Ergebnis: Für ein Angebot entsteht eine exportierbare Datei mit den DIVE-relevanten Positionsdaten.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/TelekomDive/TelekomDiveExportViewModel.cs:48-60 - Begründung: Konkrete Datenstruktur (Angebot, Distributor, Custom Properties) für den Export belegt die Schnittstellenfunktion.
|
||||
Prüfidee: Export eines Testangebots mit Telekom-Position erzeugt eine Datei mit den erwarteten DIVE-Pflichtfeldern.
|
||||
Tracelinks: SyRS-039
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Sonderfall - Anbindung an einen einzelnen Partnervertriebskanal (Telekom); Übernahme im SaaS-Zielsystem nur relevant, falls diese Partnerschaft fortbesteht.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-038
|
||||
Titel: Import von Kontenrahmen für Lagerbuchhaltung
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhalter, Lagerleiter
|
||||
Vorbedingung: Ein Kontenrahmen (Buchhaltungssystem) für die Warenbewertung ist extern verfügbar (z. B. als Excel).
|
||||
Fakt: `AccountSystemsViewModel` bietet Import (`_isImporting`) und Verwaltung mehrerer `BookKeepingAccountSystemViewModel`-Instanzen über `DevExpress.Spreadsheet` und einen `OpenFileDialog`.
|
||||
Aussage: Das System soll es erlauben, buchhalterische Kontenrahmen aus externen Dateien zu importieren und für die Lagerbewertung/Warenwirtschaft nutzbar zu machen.
|
||||
Ergebnis: Nach erfolgreichem Import stehen die importierten Konten für die Lagerbuchhaltung zur Verfügung.
|
||||
Belege:
|
||||
- [PRIMÄR] src/centron/Centron.WPF.UI/Modules/Warehousing/AccountSystems/AccountSystemsViewModel.cs:29-45 - Begründung: Konkrete Import-Infrastruktur (Dateiauswahl, Spreadsheet-Verarbeitung, Ladezustand) belegt die Funktion im Code.
|
||||
Prüfidee: Import einer Testdatei mit Kontenrahmen muss die enthaltenen Konten in `AccountSystems` sichtbar machen.
|
||||
Tracelinks: SyRS-040
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Anbindung an bestehende Kontenrahmen ist für die Warenbewertung fachlich erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-039
|
||||
Titel: Kunden-Serviceportal (CentronNexus)
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Kunde (Web-Account), Mitarbeiter
|
||||
Vorbedingung: Der Kunde besitzt einen aktivierten Web-Account.
|
||||
Fakt: `CentronNexus` bietet ein Blazor-basiertes Serviceboard mit Kanban-Ticketansicht (`CachedKanbanBoard.razor`), Filterkomponenten (Branch/Category/Employee) sowie eigene Login-Routen für Mitarbeiter und Kunden.
|
||||
Aussage: Das System soll Kunden und Mitarbeitern ein Web-Portal bereitstellen, über das Support-Tickets in einer Kanban-Ansicht eingesehen, gefiltert und bearbeitet werden können.
|
||||
Ergebnis: Ein angemeldeter Kunde sieht ausschließlich die für ihn relevanten Tickets in der Kanban-Übersicht.
|
||||
Belege:
|
||||
- [PRIMÄR] src/nexus/CentronNexus/ServiceBoard/CachedTicketList/Components/CachedKanbanBoard.razor - Begründung: Konkrete Kanban-Board-Komponente belegt die Kernfunktion des Webportals.
|
||||
- [SEKUNDÄR] src/nexus/CentronNexus/Shared/Auth/AUTHENTICATION.md - Begründung: Beschreibt getrennte Authentifizierungspfade für Mitarbeiter- und Kundenzugriff auf dasselbe Portal.
|
||||
Prüfidee: Anmeldung als Kunde und Prüfung, dass nur die eigenen Tickets im Kanban-Board erscheinen, nicht die anderer Kunden.
|
||||
Tracelinks: SyRS-041
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Ein Kundenselbstbedienungsportal ist zentraler Baustein einer SaaS-Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-040
|
||||
Titel: Outlook-Integration für Ticket- und CRM-Daten
|
||||
Ebene: StRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Mitarbeiter (Anwender von Outlook)
|
||||
Vorbedingung: Der Mitarbeiter nutzt Microsoft Outlook als primäres E-Mail-Programm.
|
||||
Fakt: `CentronNexus.OutlookAddIn` gliedert sich in eigenständige Bereiche `CRM`, `Customer`, `Document`, `Ticket` und nutzt eine eigene Login-Route (`/auth/outlook`, siehe StRS-006) sowie ein `Manifest`-Verzeichnis (Office-Add-in-Registrierung).
|
||||
Aussage: Das System soll direkt aus Outlook heraus den Zugriff auf CRM-Kontakt-, Dokument- und Ticketdaten ermöglichen, ohne dass der Mitarbeiter in die Hauptanwendung wechseln muss.
|
||||
Ergebnis: Ein Mitarbeiter kann aus einer E-Mail heraus direkt ein Ticket anlegen bzw. Kunden-/CRM-Informationen einsehen.
|
||||
Belege:
|
||||
- [PRIMÄR] src/nexus/CentronNexus.OutlookAddIn (Verzeichnisstruktur CRM/Customer/Document/Ticket, Manifest) - Begründung: Eigenständiges Office-Add-in-Projekt mit klar fachlich benannten Bereichen belegt die Integrationsfunktion strukturell.
|
||||
- [SEKUNDÄR] src/nexus/CentronNexus/Shared/Auth/AUTHENTICATION.md, Zeile 15 (`/auth/outlook` Route) - Begründung: Bestätigt einen dedizierten Authentifizierungspfad für das Outlook-Add-in.
|
||||
Prüfidee: Öffnen einer Kunden-E-Mail in Outlook mit installiertem Add-in muss die zugehörigen CRM-Daten des Absenders anzeigen.
|
||||
Tracelinks: SyRS-042
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Integration in die tägliche E-Mail-Arbeitsumgebung reduziert Medienbrüche und bleibt fachlich relevant.
|
||||
Status: belegt
|
||||
```
|
||||
+1211
File diff suppressed because it is too large
Load Diff
+1144
File diff suppressed because it is too large
Load Diff
+82
@@ -0,0 +1,82 @@
|
||||
# Traceability - c-entron ERP-Suite
|
||||
|
||||
Konsolidierte Forward-/Backward-Traceability zwischen StRS, SyRS und SwRS. Jede Zeile entspricht
|
||||
einer SwRS-Anforderung mit ihrer SyRS- und (sofern vorhanden) StRS-Elternanforderung sowie dem
|
||||
primären Artefaktbeleg der SwRS-Zeile. Zeilen mit `-` in der Spalte StRS betreffen rein technische
|
||||
Querschnittskomponenten ohne fachliche Stakeholder-Entsprechung (siehe Analysebericht). Zwei Zeilen
|
||||
(SwRS-019, SwRS-020) führen keinen PRIMÄR-, sondern nur einen SEKUNDÄR-Beleg - siehe dort für Details;
|
||||
das Feld Artefaktbeleg ist entsprechend als „kein PRIMÄR-Beleg“ gekennzeichnet.
|
||||
|
||||
Maschinell aus den Tracelinks- und Belege-Feldern von StRS.md/SyRS.md/SwRS.md extrahiert und gegen
|
||||
Duplikate/fehlende Referenzen geprüft (siehe Analysebericht, Konsistenzcheck).
|
||||
|
||||
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg (PRIMÄR, aus SwRS) |
|
||||
|---|---|---|---|
|
||||
| StRS-001 | SyRS-001 | SwRS-001 | `src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:95-111` |
|
||||
| StRS-001 | SyRS-001 | SwRS-002 | `src/backend/Centron.BL/Administration/Rights/UserRightsExt.cs:18-32` |
|
||||
| StRS-001 | SyRS-002 | SwRS-003 | `src/webservice/Centron.Controllers/Authorization/AuthorizeUserRightAttribute.cs:38-56` |
|
||||
| StRS-002 | SyRS-003 | SwRS-004 | `src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:39-48` |
|
||||
| StRS-003 | SyRS-004 | SwRS-005 | `src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:43-47` |
|
||||
| StRS-004 | SyRS-005 | SwRS-006 | `src/centron/Centron.WPF.UI/Modules/Administration/DSGVO/CentronDataSecurityViewModel.cs:35-36` |
|
||||
| StRS-005 | SyRS-006 | SwRS-007 | `src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:43-54` |
|
||||
| StRS-005 | SyRS-006 | SwRS-008 | `src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:45-49` |
|
||||
| StRS-006 | SyRS-007 | SwRS-009 | `src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:61-62` |
|
||||
| StRS-006 | SyRS-007 | SwRS-010 | `src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:45,51,57,67` |
|
||||
| StRS-006 | SyRS-008 | SwRS-011 | `src/backend/Centron.BL/Administration/Rights/UserRightsExt.cs:18-47` |
|
||||
| StRS-007 | SyRS-009 | SwRS-012 | `src/centron/Centron.WPF.UI/Modules/ArtificialIntelligence/ApiConnector.cs:21-38` |
|
||||
| StRS-008 | SyRS-010 | SwRS-013 | `src/centron/Centron.WPF.UI/Modules/Calendar/Settings/AppointmentsForTickets/AppointmentsForTicketsSettingsViewModel.cs:24-25` |
|
||||
| StRS-009 | SyRS-011 | SwRS-014 | `src/centron/Centron.WPF.UI/Modules/Dashboard/Modules/ModulesViewModel.cs:28-43` |
|
||||
| StRS-010 | SyRS-012 | SwRS-015 | `src/backend/Centron.Gateway/Core/BookKeepingExportFileGeneratorResult.cs`, `BookKeepingReceiptExportFileGeneratorResult.cs` |
|
||||
| StRS-011 | SyRS-013 | SwRS-016 | `src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:22-38` |
|
||||
| StRS-011 | SyRS-013 | SwRS-017 | `src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:20,42-48` |
|
||||
| StRS-012 | SyRS-014 | SwRS-018 | `src/centron/Centron.WPF.UI/Modules/ExternalTool/Variables/ExternalToolsVaribaleCollection.cs:11-33` |
|
||||
| StRS-013 | SyRS-015 | SwRS-019 | kein PRIMÄR-Beleg (nur SEKUNDÄR: `contracts-backend.md`) - Status HYPOTHESE |
|
||||
| StRS-013 | SyRS-016 | SwRS-020 | kein PRIMÄR-Beleg (nur SEKUNDÄR: `contracts-backend.md`) - Status HYPOTHESE |
|
||||
| StRS-014 | SyRS-017 | SwRS-021 | `src/centron/Centron.WPF.UI/Modules/Finances/Dunning/Common/DunningRunForCustomerState.cs:3-11` |
|
||||
| StRS-015 | SyRS-018 | SwRS-022 | `src/centron/Centron.WPF.UI/Modules/Global/CustomProperties/CustomPropertiesConnector.cs:24-33` |
|
||||
| StRS-016 | SyRS-019 | SwRS-023 | `src/centron/Centron.WPF.UI/Modules/Gui/Profiles/ManageUiProfileViewModel.cs:24` |
|
||||
| StRS-017 | SyRS-020 | SwRS-024 | `src/centron/Centron.WPF.UI/Modules/Helpdesk/ConnectionNumber/HelpdeskConnectionNumberGroupViewModel.cs:25-31` |
|
||||
| StRS-018 | SyRS-021 | SwRS-025 | `src/centron/Centron.WPF.UI/Modules/Logistic/LogisticSettings/LogisticSettingsViewModel.cs:23-42` |
|
||||
| StRS-019 | SyRS-022 | SwRS-026 | `src/apis/Centron.Api.Gls/CentronGlsErrors.cs` |
|
||||
| StRS-020 | SyRS-023 | SwRS-027 | `src/centron/Centron.WPF.UI/Modules/Massenupdates/MassUpdatesViewModel.cs:36-47` |
|
||||
| StRS-021 | SyRS-024 | SwRS-028 | `src/centron/Centron.WPF.UI/Modules/MyCentron/CentronInspectors/Inspectors/Article/CostCentreMandatoryCheck.cs:33-41` |
|
||||
| StRS-022 | SyRS-025 | SwRS-029 | `src/centron/Centron.WPF.UI/Modules/OnlineBanking/AccountTransactions/CheckForUnknownIban/CheckForUnknownIbanViewModel.cs:35-39` |
|
||||
| StRS-023 | SyRS-026 | SwRS-030 | `src/centron/Centron.WPF.UI/Modules/PLM/ProductFamilyGroupViewModel.cs`, `ProductFamilyViewModel.cs` |
|
||||
| StRS-024 | SyRS-027 | SwRS-031 | `src/centron/Centron.WPF.UI/Modules/PasswordManager/AccessAreaManagementAppModuleController.cs` u. a. |
|
||||
| StRS-025 | SyRS-028 | SwRS-032 | `src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter/DTOViewModel/CostCentreDTOViewModel.cs`, `CostObjectDTOViewModel.cs` |
|
||||
| StRS-026 | SyRS-029 | SwRS-033 | `src/centron/Centron.WPF.UI/Modules/Production/ProductionOrder/AddProductionOrder/AddProductionOrderViewModel.cs:31` |
|
||||
| StRS-027 | SyRS-030 | SwRS-034 | `src/centron/Centron.WPF.UI/Modules/ProjectManagement/ProjectManagementAppModuleController.cs:41-44` - Status HYPOTHESE |
|
||||
| StRS-028 | SyRS-031 | SwRS-060 | `src/centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference/DifferenceViewModel.cs:22-35` |
|
||||
| StRS-029 | SyRS-032 | SwRS-058 | `src/centron/Centron.WPF.UI/Modules/Purchasing/EDIManagement/EDIManagementAppViewModel.cs:32-45` |
|
||||
| StRS-030 | SyRS-033 | SwRS-035 | vier `.csproj`-Projekte unter `src/apis/Centron.APIs.{Cop,Egis,ITscope,Icecat}DataAccess` |
|
||||
| StRS-031 | SyRS-034 | SwRS-036 | `src/centron/Centron.WPF.UI/Modules/QM/Settings/QmSettingsViewModel.cs:11-47` |
|
||||
| StRS-032 | SyRS-035 | SwRS-037 | `src/centron/Centron.WPF.UI/Modules/Reports/ReportManagement/Query/QueryAppModuleController.cs` |
|
||||
| StRS-033 | SyRS-036 | SwRS-038 | `src/centron/Centron.WPF.UI/Modules/Rma/NewRma/Pages/NewRmaSummaryPageViewModel.cs:27-37` |
|
||||
| StRS-034 | SyRS-037 | SwRS-039 | `src/centron/Centron.WPF.UI/Modules/Sales/ProductMatrix/ProductMatrixDialogViewModel.cs:17` |
|
||||
| StRS-035 | SyRS-038 | SwRS-059 | `src/centron/Centron.WPF.UI/Modules/Statistics/EmployeeAnalytics/EmployeeAnalyticsAppModuleController.cs:22` |
|
||||
| StRS-036 | SyRS-039 | SwRS-040 | `src/centron/Centron.WPF.UI/Modules/Survey/Pages/Analyse/SurveyAnalyseViewModel.cs:33-39` - Status HYPOTHESE |
|
||||
| StRS-037 | SyRS-040 | SwRS-041 | `src/centron/Centron.WPF.UI/Modules/TelekomDive/TelekomDiveExportViewModel.cs:44` |
|
||||
| StRS-038 | SyRS-041 | SwRS-042 | `src/centron/Centron.WPF.UI/Modules/Warehousing/AccountSystems/AccountSystemsViewModel.cs:38-39` |
|
||||
| StRS-039 | SyRS-042 | SwRS-043 | `src/nexus/CentronNexus/ServiceBoard/CachedTicketList/Components/CachedKanbanBoard.razor` - übergeordnete SyRS-042 Status HYPOTHESE |
|
||||
| StRS-040 | SyRS-043 | SwRS-044 | `src/nexus/CentronNexus.OutlookAddIn` (Verzeichnisstruktur) |
|
||||
| - | SyRS-044 | SwRS-045 | `src/backend/Centron.Common/DeveloperSecurity.cs:30-46` |
|
||||
| - | SyRS-045 | SwRS-046 | `src/backend/Centron.DAO/DAOFactory.cs:31-38` |
|
||||
| - | SyRS-046 | SwRS-047 | `src/backend/Centron.Entities/Entities` (Verzeichnisstruktur) |
|
||||
| - | SyRS-047 | SwRS-048 | `src/backend/Centron.Gateway/EDI_Alltron/AlltronOrder.cs` u. a. |
|
||||
| - | SyRS-048 | SwRS-049 | `src/backend/Centron.Interfaces/IBaseRepository.cs:1-4` |
|
||||
| - | SyRS-049 | SwRS-050 | `src/shared/Centron.Controls` (Verzeichnisstruktur) |
|
||||
| - | SyRS-050 | SwRS-051 | `src/shared/Centron.Core/GoogleAuthenticator`, referenziert von `TwoFactorAuthenticationBL.cs:7,51` |
|
||||
| - | SyRS-051 | SwRS-052 | `src/centron/Centron.WPF.UI.Extension` (Verzeichnisstruktur) |
|
||||
| - | SyRS-052 | SwRS-053 | `src/nexus/CentronNexus.Host/Program.cs:36,37` |
|
||||
| - | SyRS-053 | SwRS-054 | `src/webservice/c-entron.misc.ConnectionManager/ConnectionManagerViewModel.cs:33-50` |
|
||||
| - | SyRS-054 | SwRS-055 | `src/Centron.Api.docuFORM/Helper/OAuthHelper.cs`, `Models/AuthCodeRequest.cs` |
|
||||
| - | SyRS-055 | SwRS-056 | `deployment/centron/CentronSetupProject`, `WebServiceSetupProject`, `deployment/WixSharpInstaller` |
|
||||
| - | SyRS-056 | SwRS-057 | `docker/c-entron-api`, `c-entron-demo`, `c-entron-mailcatcher`, `c-entron-regression-tests-db/-pipeline` - Status HYPOTHESE |
|
||||
|
||||
## Statistik
|
||||
|
||||
- StRS-Anforderungen gesamt: 40 (alle referenziert von mindestens einer SyRS-Anforderung)
|
||||
- SyRS-Anforderungen gesamt: 56 (davon 13 ohne StRS-Elternanforderung - rein technische Querschnittskomponenten; alle 56 referenziert von mindestens einer SwRS-Anforderung)
|
||||
- SwRS-Anforderungen gesamt: 60 (jede referenziert genau eine SyRS-Anforderung)
|
||||
- Trace-Zeilen (SwRS-Ebene) gesamt: 60
|
||||
- Zeilen ohne PRIMÄR-Beleg auf SwRS-Ebene: 2 (SwRS-019, SwRS-020 - siehe Hypothesen.md)
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
"StRS" "SyRS" "SwRS" "Beleg"
|
||||
"StRS-001" "SyRS-001" "SwRS-001" "src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:95-111"
|
||||
"StRS-001" "SyRS-001" "SwRS-002" "src/backend/Centron.BL/Administration/Rights/UserRightsExt.cs:18-32"
|
||||
"StRS-001" "SyRS-002" "SwRS-003" "src/webservice/Centron.Controllers/Authorization/AuthorizeUserRightAttribute.cs:38-56"
|
||||
"StRS-002" "SyRS-003" "SwRS-004" "src/backend/Centron.BL/Administration/Rights/AppRightsBL.cs:39-48"
|
||||
"StRS-003" "SyRS-004" "SwRS-005" "src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:43-47"
|
||||
"StRS-004" "SyRS-005" "SwRS-006" "src/centron/Centron.WPF.UI/Modules/Administration/DSGVO/CentronDataSecurityViewModel.cs:35-36"
|
||||
"StRS-005" "SyRS-006" "SwRS-007" "src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:43-54"
|
||||
"StRS-005" "SyRS-006" "SwRS-008" "src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:45-49"
|
||||
"StRS-006" "SyRS-007" "SwRS-009" "src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:61-62"
|
||||
"StRS-006" "SyRS-007" "SwRS-010" "src/backend/Centron.BL/Administration/Logins/Auth/OpenIdConnectAuthenticator.cs:45,51,57,67"
|
||||
"StRS-006" "SyRS-008" "SwRS-011" "src/backend/Centron.BL/Administration/Rights/UserRightsExt.cs:18-47"
|
||||
"StRS-007" "SyRS-009" "SwRS-012" "src/centron/Centron.WPF.UI/Modules/ArtificialIntelligence/ApiConnector.cs:21-38"
|
||||
"StRS-008" "SyRS-010" "SwRS-013" "src/centron/Centron.WPF.UI/Modules/Calendar/Settings/AppointmentsForTickets/AppointmentsForTicketsSettingsViewModel.cs:24-25"
|
||||
"StRS-009" "SyRS-011" "SwRS-014" "src/centron/Centron.WPF.UI/Modules/Dashboard/Modules/ModulesViewModel.cs:28-43"
|
||||
"StRS-010" "SyRS-012" "SwRS-015" "src/backend/Centron.Gateway/Core/BookKeepingExportFileGeneratorResult.cs, BookKeepingReceiptExportFileGeneratorResult.cs (Klassennamen)"
|
||||
"StRS-011" "SyRS-013" "SwRS-016" "src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:22-38"
|
||||
"StRS-011" "SyRS-013" "SwRS-017" "src/apis/Centron.Api.EbInterface/EbInterfaceLogic.cs:20, 42-48"
|
||||
"StRS-012" "SyRS-014" "SwRS-018" "src/centron/Centron.WPF.UI/Modules/ExternalTool/Variables/ExternalToolsVaribaleCollection.cs:11-33"
|
||||
"StRS-013" "SyRS-015" "SwRS-019" "(kein PRIMAER-Beleg)"
|
||||
"StRS-013" "SyRS-016" "SwRS-020" "(kein PRIMAER-Beleg)"
|
||||
"StRS-014" "SyRS-017" "SwRS-021" "src/centron/Centron.WPF.UI/Modules/Finances/Dunning/Common/DunningRunForCustomerState.cs:3-11"
|
||||
"StRS-015" "SyRS-018" "SwRS-022" "src/centron/Centron.WPF.UI/Modules/Global/CustomProperties/CustomPropertiesConnector.cs:24-33"
|
||||
"StRS-016" "SyRS-019" "SwRS-023" "src/centron/Centron.WPF.UI/Modules/Gui/Profiles/ManageUiProfileViewModel.cs:24"
|
||||
"StRS-017" "SyRS-020" "SwRS-024" "src/centron/Centron.WPF.UI/Modules/Helpdesk/ConnectionNumber/HelpdeskConnectionNumberGroupViewModel.cs:25-31"
|
||||
"StRS-018" "SyRS-021" "SwRS-025" "src/centron/Centron.WPF.UI/Modules/Logistic/LogisticSettings/LogisticSettingsViewModel.cs:23-42"
|
||||
"StRS-019" "SyRS-022" "SwRS-026" "src/apis/Centron.Api.Gls/CentronGlsErrors.cs (Klassenname/Struktur)"
|
||||
"StRS-020" "SyRS-023" "SwRS-027" "src/centron/Centron.WPF.UI/Modules/Massenupdates/MassUpdatesViewModel.cs:36-47"
|
||||
"StRS-021" "SyRS-024" "SwRS-028" "src/centron/Centron.WPF.UI/Modules/MyCentron/CentronInspectors/Inspectors/Article/CostCentreMandatoryCheck.cs:33-41"
|
||||
"StRS-022" "SyRS-025" "SwRS-029" "src/centron/Centron.WPF.UI/Modules/OnlineBanking/AccountTransactions/CheckForUnknownIban/CheckForUnknownIbanViewModel.cs:35-39"
|
||||
"StRS-023" "SyRS-026" "SwRS-030" "src/centron/Centron.WPF.UI/Modules/PLM/ProductFamilyGroupViewModel.cs, ProductFamilyViewModel.cs (Klassenstruktur)"
|
||||
"StRS-024" "SyRS-027" "SwRS-031" "src/centron/Centron.WPF.UI/Modules/PasswordManager/AccessAreaManagementAppModuleController.cs, AccessManagementAppModuleController.cs, GuidelineManagementAppModuleController.cs (je eigene ID/Implementierung)"
|
||||
"StRS-025" "SyRS-028" "SwRS-032" "src/centron/Centron.WPF.UI/Modules/PayersAndCostCenter/DTOViewModel/CostCentreDTOViewModel.cs, CostObjectDTOViewModel.cs (Dateistruktur)"
|
||||
"StRS-026" "SyRS-029" "SwRS-033" "src/centron/Centron.WPF.UI/Modules/Production/ProductionOrder/AddProductionOrder/AddProductionOrderViewModel.cs:31"
|
||||
"StRS-027" "SyRS-030" "SwRS-034" "src/centron/Centron.WPF.UI/Modules/ProjectManagement/ProjectManagementAppModuleController.cs:41-44 (`GetRights()`)"
|
||||
"StRS-030" "SyRS-033" "SwRS-035" "src/apis/Centron.APIs.CopDataAccess/Centron.APIs.CopDataAccess.csproj, EgisDataAccess/*.csproj, ITscopeDataAccess/*.csproj, IcecatDataAccess/*.csproj"
|
||||
"StRS-031" "SyRS-034" "SwRS-036" "src/centron/Centron.WPF.UI/Modules/QM/Settings/QmSettingsViewModel.cs:11-47"
|
||||
"StRS-032" "SyRS-035" "SwRS-037" "src/centron/Centron.WPF.UI/Modules/Reports/ReportManagement/Query/QueryAppModuleController.cs (Dateistruktur)"
|
||||
"StRS-033" "SyRS-036" "SwRS-038" "src/centron/Centron.WPF.UI/Modules/Rma/NewRma/Pages/NewRmaSummaryPageViewModel.cs:27-37"
|
||||
"StRS-034" "SyRS-037" "SwRS-039" "src/centron/Centron.WPF.UI/Modules/Sales/ProductMatrix/ProductMatrixDialogViewModel.cs:17"
|
||||
"StRS-036" "SyRS-039" "SwRS-040" "src/centron/Centron.WPF.UI/Modules/Survey/Pages/Analyse/SurveyAnalyseViewModel.cs:33-39"
|
||||
"StRS-037" "SyRS-040" "SwRS-041" "src/centron/Centron.WPF.UI/Modules/TelekomDive/TelekomDiveExportViewModel.cs:44 (using System.Xml.Linq)"
|
||||
"StRS-038" "SyRS-041" "SwRS-042" "src/centron/Centron.WPF.UI/Modules/Warehousing/AccountSystems/AccountSystemsViewModel.cs:38-39"
|
||||
"StRS-039" "SyRS-042" "SwRS-043" "src/nexus/CentronNexus/ServiceBoard/CachedTicketList/Components (Dateistruktur)"
|
||||
"StRS-040" "SyRS-043" "SwRS-044" "src/nexus/CentronNexus.OutlookAddIn (Verzeichnisstruktur)"
|
||||
"-" "SyRS-044" "SwRS-045" "src/backend/Centron.Common/DeveloperSecurity.cs:30-46"
|
||||
"-" "SyRS-045" "SwRS-046" "src/backend/Centron.DAO/DAOFactory.cs:31-38"
|
||||
"-" "SyRS-046" "SwRS-047" "src/backend/Centron.Entities/Entities (Verzeichnisstruktur)"
|
||||
"-" "SyRS-047" "SwRS-048" "src/backend/Centron.Gateway/EDI_Alltron/AlltronOrder.cs, AlltronDelivery.cs, AlltronInvoice.cs, AlltronResponse.cs (Klassennamen)"
|
||||
"-" "SyRS-048" "SwRS-049" "src/backend/Centron.Interfaces/IBaseRepository.cs:1-4"
|
||||
"-" "SyRS-049" "SwRS-050" "src/shared/Centron.Controls (Verzeichnisstruktur)"
|
||||
"-" "SyRS-050" "SwRS-051" "src/shared/Centron.Core/GoogleAuthenticator (Verzeichnis), referenziert von src/backend/Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs:7,51"
|
||||
"-" "SyRS-051" "SwRS-052" "src/centron/Centron.WPF.UI.Extension (Verzeichnisstruktur: Extensibility getrennt von Actions/Commands)"
|
||||
"-" "SyRS-052" "SwRS-053" "src/nexus/CentronNexus.Host/Program.cs:36,37"
|
||||
"-" "SyRS-053" "SwRS-054" "src/webservice/c-entron.misc.ConnectionManager/ConnectionManagerViewModel.cs:33-50"
|
||||
"-" "SyRS-054" "SwRS-055" "src/Centron.Api.docuFORM/Helper/OAuthHelper.cs, Models/AuthCodeRequest.cs (Klassenstruktur)"
|
||||
"-" "SyRS-055" "SwRS-056" "deployment/centron/CentronSetupProject, deployment/centron/WebServiceSetupProject (Projektstruktur), deployment/WixSharpInstaller"
|
||||
"-" "SyRS-056" "SwRS-057" "docker/c-entron-api, docker/c-entron-demo, docker/c-entron-mailcatcher, docker/c-entron-regression-tests-db, docker/c-entron-regression-tests-pipeline (Verzeichnisstruktur)"
|
||||
"StRS-029" "SyRS-032" "SwRS-058" "src/centron/Centron.WPF.UI/Modules/Purchasing/EDIManagement/EDIManagementAppViewModel.cs:32-45"
|
||||
"StRS-035" "SyRS-038" "SwRS-059" "src/centron/Centron.WPF.UI/Modules/Statistics/EmployeeAnalytics/EmployeeAnalyticsAppModuleController.cs:22"
|
||||
"StRS-028" "SyRS-031" "SwRS-060" "src/centron/Centron.WPF.UI/Modules/ProjectPriceImport/PriceDifference/DifferenceViewModel.cs:22-35"
|
||||
|
+209
@@ -0,0 +1,209 @@
|
||||
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Prompt-Version 02
|
||||
|
||||
## Lauf
|
||||
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
|
||||
- **Prompt-Version:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
|
||||
vorhandene Prompt-Versionsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
|
||||
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
|
||||
- **Startzeit:** 2026-08-26T09:43:15.7055025+02:00
|
||||
- **Endzeit:** 2026-08-26T10:17:52.9883378+02:00
|
||||
- **Dauer gesamt:** 0:34:37 (`duration_ms` 0:34:35; API: 0:34:10)
|
||||
— **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 (Skill 4.2.1)
|
||||
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
|
||||
|
||||
## Werkzeugkonfiguration
|
||||
- **Skill-Version:** 4.2.1
|
||||
- **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-sonnet-5`
|
||||
- **Modelle (tatsächlich eingesetzt):** `claude-sonnet-5` 18.241.585 Tokens (99.96 %), `claude-haiku-4-5-20251001` 6.967 Tokens (0.04 %)
|
||||
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
|
||||
- **Effort:** `high` (per `--effort high` gesetzt)
|
||||
- **Laufverzeichnis-ID:** `v4.2.1-f631`
|
||||
- **Ablage:** `Iteration 2/claude-sonnet-5/solo/high/`
|
||||
- **Parallele Läufe:** **ja** – zeitgleich liefen:
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-3983`
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-4840`
|
||||
- `02_Lauf_2026-08-26_094250_v4.2.1-c69e`
|
||||
|
||||
Die Zeitangaben dieses Laufs sind daher **nicht** für Laufzeitvergleiche zu verwenden.
|
||||
Tokenverbrauch, Anforderungszahl und Denials bleiben unverzerrt.
|
||||
- **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 | 188 |
|
||||
| Output-Tokens | 216.858 (davon 47.374 Thinking-Tokens) |
|
||||
| Cache-Write-Tokens | 330.568 |
|
||||
| Cache-Read-Tokens | 17.693.971 |
|
||||
| Agent-Turns | 120 |
|
||||
|
||||
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
|
||||
| Messgröße | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|
||||
|---|---:|---:|---:|
|
||||
| Input-Tokens | 188 | 6.943 | 7.131 |
|
||||
| Output-Tokens | 216.858 | 24 | 216.882 |
|
||||
| Cache-Write-Tokens | 330.568 | 0 | 330.568 |
|
||||
| Cache-Read-Tokens | 17.693.971 | 0 | 17.693.971 |
|
||||
| **Tokens gesamt** | **18.241.585** | **6.967** | **18.248.552** |
|
||||
|
||||
**Tokens gesamt: 18.248.552** — 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 | 40 | 25,6 % |
|
||||
| SyRS | 56 | 35,9 % |
|
||||
| SwRS | 60 | 38,5 % |
|
||||
| **Gesamt** | **156** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 60 | 38,5 % |
|
||||
| Daten | 31 | 19,9 % |
|
||||
| Sicherheit | 28 | 17,9 % |
|
||||
| Schnittstelle | 20 | 12,8 % |
|
||||
| nicht-funktional | 17 | 10,9 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 189 |
|
||||
| davon `PRIMÄR` | 154 (81,5 %) |
|
||||
| davon `SEKUNDÄR` | 27 (14,3 %) |
|
||||
| davon `KONTEXT` | 8 (4,2 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 153 (98,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 144 | 92,3 % |
|
||||
| workaround | 7 | 4,5 % |
|
||||
| sonderfall | 5 | 3,2 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 147 | 94,2 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 9 | 5,8 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 7 | 4,5 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 19 | 12,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]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 156 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 143 von 156 mit Tracelinks (91,7 %) |
|
||||
|
||||
## Ergebnis
|
||||
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
|
||||
- **Session-ID:** `be170488-4a6d-4f7c-a9c0-8b8906df8e1f`
|
||||
- **Permission-Denials:** 3 (2 × `Bash`, 1 × `PowerShell`) – **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:** 8 Dateien in `Ergebnisse\`:
|
||||
|
||||
| Datei | Größe |
|
||||
|---|---:|
|
||||
| `Analysebericht.md` | 24.939 B |
|
||||
| `Glossar.md` | 6.868 B |
|
||||
| `Hypothesen.md` | 5.977 B |
|
||||
| `StRS.md` | 64.749 B |
|
||||
| `SwRS.md` | 82.291 B |
|
||||
| `SyRS.md` | 83.513 B |
|
||||
| `Traceability.md` | 8.783 B |
|
||||
| `_trace_rows.csv` | 7.624 B |
|
||||
|
||||
- **Root unverändert:** ja – `before.txt` und `after.txt` sind beide leer (zeilenendennormalisiert verglichen)
|
||||
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
**1. Parallelbetrieb – Zeitangaben unbrauchbar, Verbrauchsgrößen gültig.** Dieser Lauf ist einer
|
||||
von vier gleichzeitig gestarteten Wiederholungen derselben Zelle. Wanduhrzeit, `duration_ms` und
|
||||
`duration_api_ms` sind dadurch verzerrt, weil die vier um CPU, Netz und API-Kontingent
|
||||
konkurrierten. Tokenverbrauch, Anforderungszahl, Belegkennzahlen und Denials sind davon nicht
|
||||
betroffen und uneingeschränkt verwertbar. Einziger gültiger Laufzeitmesspunkt der Zelle bleibt der
|
||||
serielle Lauf `084301_v4.2.0-d6f9` mit 45:04.
|
||||
|
||||
**2. CLI-Version 2.1.246 statt der verifizierten 2.1.245.** Die für den Modus `solo`
|
||||
entscheidende Kontrolle (`subagent_stats.spawned` = 0) wurde gegengeprüft und ist erfüllt; die
|
||||
Feldnamen von `RawResult.json` sind unverändert.
|
||||
|
||||
**3. Skill-Version 4.2.1 gegenüber 4.2.0 des seriellen Laufs – keine Bedingungsänderung.** Der
|
||||
einzige Unterschied ist der Pfadfilter der Root-Prüfung (`git status --porcelain -- <pfad>`), eine
|
||||
korrigierte Messung. Die fünf Läufe der Zelle bleiben untereinander vergleichbar.
|
||||
|
||||
**4. Beste Belegqualität der Zelle.** 81,5 % `PRIMÄR` und 153 von 156 Anforderungen (98,1 %) mit
|
||||
mindestens einem Primärbeleg – der höchste Wert aller fünf Läufe. Die risikobasierte Priorisierung
|
||||
ist als einziger Lauf der Zelle vollständig erfüllt: alle 49 risikorelevanten Anforderungen
|
||||
gedeckt. Auch der Hypothesenanteil ist mit 5,8 % der niedrigste, was hier nicht für Sorglosigkeit
|
||||
spricht, sondern zur hohen Primärbelegquote passt.
|
||||
|
||||
**5. Einziger Lauf mit unvollständiger Traceability: 143 von 156 (91,7 %).** 13 Anforderungen
|
||||
tragen keine Tracelinks. Alle anderen vier Läufe der Zelle liegen bei 100 %. Da Tracelinks über
|
||||
alle 3.287 Anforderungen von Tag 1 hinweg lückenlos gesetzt waren, ist das ein neuer Ausfall und
|
||||
beim nächsten Prompt-Zuschnitt zu beobachten.
|
||||
|
||||
**6. Die drei Permission-Denials sind ein einziger Vorgang – und ein Nebeneffekt der Denylist.**
|
||||
Der Agent legte während des Laufs die Arbeitsdatei `_trace_rows.csv` in `Ergebnisse\` ab und
|
||||
versuchte dreimal, sie wieder zu entfernen (`rm`, `Remove-Item`, `rm -f`). Alle drei Versuche
|
||||
trafen die Denylist. Die Datei liegt deshalb als achtes, vom Prompt nicht gefordertes Artefakt im
|
||||
Ergebnisordner. Sie wurde **bewusst nicht nachträglich gelöscht**: Das würde die Artefaktlage des
|
||||
Laufs im Nachhinein verändern. Der Befund ist eine Eigenschaft der Werkzeugkonfiguration, nicht
|
||||
des Modells – die Denylist sperrt Löschbefehle pauschal, also auch im Laufverzeichnis, für das der
|
||||
Agent Schreibrecht hat.
|
||||
|
||||
**7. Gleichmäßigste Ebenenverteilung der Zelle:** 40 StRS / 56 SyRS / 60 SwRS. Gegenüber `d6f9`
|
||||
(20/120/30) und `c69e` (21/15/124) ist das die einzige Aufteilung, die den drei Ebenen
|
||||
vergleichbares Gewicht gibt.
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"is_error":false,"duration_api_ms":2050810,"num_turns":120,"stop_reason":"end_turn","session_id":"be170488-4a6d-4f7c-a9c0-8b8906df8e1f","total_cost_usd":7.037085199999999,"usage":{"input_tokens":188,"cache_creation_input_tokens":330568,"cache_read_input_tokens":17693971,"output_tokens":216858,"output_tokens_details":{"thinking_tokens":47374},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":330568,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":712,"cache_read_input_tokens":357293,"cache_creation_input_tokens":1087,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":1087},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6943,"outputTokens":24,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007063000000000001,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-sonnet-5":{"inputTokens":188,"outputTokens":216858,"cacheReadInputTokens":17693971,"cacheCreationInputTokens":330568,"webSearchRequests":0,"costUSD":7.0300222,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-sonnet-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[{"tool_name":"Bash","tool_use_id":"toolu_011bXNwRqRphwMd8J7iTxWEC","tool_input":{"command":"rm \"c:\\DEV\\MasterArbeit\\Versuche\\Versuch_01\\Tag 2\\claude-sonnet-5\\solo\\high\\02_Lauf_2026-08-26_094249_v4.2.1-f631\\Ergebnisse\\_trace_rows.csv\"","description":"Remove temporary trace extraction file"}},{"tool_name":"PowerShell","tool_use_id":"toolu_01GjUrKZLagCciF9jS6rdEc3","tool_input":{"command":"Remove-Item \"c:\\DEV\\MasterArbeit\\Versuche\\Versuch_01\\Tag 2\\claude-sonnet-5\\solo\\high\\02_Lauf_2026-08-26_094249_v4.2.1-f631\\Ergebnisse\\_trace_rows.csv\" -Force","description":"Remove temporary trace extraction file"}},{"tool_name":"Bash","tool_use_id":"toolu_01C55CehFkkud58mfm9waWPv","tool_input":{"command":"rm -f \"c:\\DEV\\MasterArbeit\\Versuche\\Versuch_01\\Tag 2\\claude-sonnet-5\\solo\\high\\02_Lauf_2026-08-26_094249_v4.2.1-f631\\Ergebnisse\\_trace_rows.csv\" 2>&1; echo \"exit=$?\"","description":"Attempt to remove scratch trace file again"}}],"terminal_reason":"completed","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":null,"result":"The specification run is complete. Summary of what was produced in `Ergebnisse\\`:\n\n- **StRS.md** — 40 stakeholder requirements covering all 29 business modules plus cross-cutting stakeholder concerns (rights, licensing, DSGVO, 2FA, SSO, automated billing).\n- **SyRS.md** — 56 system requirements, including 13 baseline requirements for pure technical infrastructure (DAO, Entities, Gateway, Interfaces, hosting, deployment, Docker) that have no direct stakeholder narrative.\n- **SwRS.md** — 60 software requirements with concrete class/method-level evidence.\n- **Traceability.md** — machine-extracted trace table (StRS↔SyRS↔SwRS↔Artefaktbeleg), verified for dangling references and missing coverage.\n- **Hypothesen.md** — 9 requirements marked `[HYPOTHESE]`, deckungsgleich with inline markers.\n- **Glossar.md** — 27 domain terms with source references.\n- **Analysebericht.md** — 50-row module inventory (Schritt 0), coverage table, consistency check, and self-assessment.\n\nTotal: 156 requirements, all with at least one classified artefact reference; every one of the 50 inventoried modules/components has at least one requirement (no \"nicht analysiert\" entries).\n\nDuring self-verification I found and fixed three real defects before finalizing: a dangling tracelink (SyRS-053→StRS-042), two gaps in SwRS coverage (SyRS-031, SyRS-038 had no child), and — most importantly — two risk-relevant requirements (SyRS-008, SwRS-020) that were marked \"belegt\" without a PRIMÄR beleg, violating the run's own evidence rule; one was reclassified with a genuine PRIMÄR reference, the other correctly downgraded to HYPOTHESE.\n\nOne leftover scratch file (`_trace_rows.csv`, used to programmatically build the traceability table) remains in the output folder — deletion was denied by the permission system, so it's harmless clutter you can remove manually if desired.","ttft_ms":2339,"ttft_stream_ms":1252,"time_to_request_ms":26,"type":"result","duration_ms":2075714,"uuid":"6f5b476a-4829-4a95-a12d-e4783f7ea2fa","queued_turn_count":0}
|
||||
+2999
File diff suppressed because it is too large
Load Diff
+64
@@ -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 | 40 | 25,6 % |
|
||||
| SyRS | 56 | 35,9 % |
|
||||
| SwRS | 60 | 38,5 % |
|
||||
| **Gesamt** | **156** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 60 | 38,5 % |
|
||||
| Daten | 31 | 19,9 % |
|
||||
| Sicherheit | 28 | 17,9 % |
|
||||
| Schnittstelle | 20 | 12,8 % |
|
||||
| nicht-funktional | 17 | 10,9 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 189 |
|
||||
| davon `PRIMÄR` | 154 (81,5 %) |
|
||||
| davon `SEKUNDÄR` | 27 (14,3 %) |
|
||||
| davon `KONTEXT` | 8 (4,2 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 153 (98,1 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 144 | 92,3 % |
|
||||
| workaround | 7 | 4,5 % |
|
||||
| sonderfall | 5 | 3,2 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 147 | 94,2 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 9 | 5,8 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 7 | 4,5 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 19 | 12,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]` | **erfüllt** (49 risikorelevante Anforderungen, alle gedeckt) |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 156 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 143 von 156 mit Tracelinks (91,7 %) |
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+177
@@ -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\Tag 2\claude-sonnet-5\solo\high\02_Lauf_2026-08-26_094249_v4.2.1-f631\Ergebnisse\`.
|
||||
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T10:17:52.9883378+02:00
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T09:43:15.7055025+02:00
|
||||
+428
@@ -0,0 +1,428 @@
|
||||
# Analysebericht - c-entron ERP Reverse Requirements Engineering
|
||||
|
||||
Lauf: 02_Lauf_2026-08-26_094250 (claude-sonnet-5, solo, high, Iteration 02 des Prompts)
|
||||
|
||||
## Schritt 0 - Modulinventar
|
||||
|
||||
Grundlage: `src/backend/Centron.BL` enthält 85 fachliche Top-Level-Ordner (Business-Logik-Schicht).
|
||||
Der Ordner `Administration` (959 .cs-Dateien) ist intern in ca. 30 Unterbereiche gegliedert und wird
|
||||
wegen seiner Größe und Heterogenität in dieser Tabelle in seine wichtigsten Unterbereiche aufgelöst.
|
||||
Zusätzlich sind die technischen Querschnittskomponenten (Clients, API-Schicht, Datenzugriff, externe
|
||||
Integrationen) aufgeführt, da sie eigenständige, im Zielsystem zu ersetzende bzw. neu zu bauende
|
||||
Komponenten darstellen.
|
||||
|
||||
Spalte "Analysetiefe" wird am Ende des Laufs (Abdeckungstabelle) befüllt.
|
||||
|
||||
### A. Fachliche Module (Business-Logik, `src/backend/Centron.BL/*`)
|
||||
|
||||
| # | Modul | Pfad | Fachliche Aufgabe |
|
||||
|---|---|---|---|
|
||||
| 1 | Accounting | `Centron.BL/Accounting` | Bankkontenverwaltung (`BankAccountBL`) |
|
||||
| 2 | Accounts | `Centron.BL/Accounts` | Adressstamm: Firmen/Personen, Kontaktpersonen, Kampagnen, Kundensuche |
|
||||
| 3 | Administration - Rights | `Centron.BL/Administration/Rights` | Benutzerrechte- und Gruppenverwaltung (Berechtigungssystem) |
|
||||
| 4 | Administration - Logins | `Centron.BL/Administration/Logins` | Authentifizierung, Tickets, WebAccounts, EntraID-Anbindung, 2FA-Login |
|
||||
| 5 | Administration - DataSecurity | `Centron.BL/Administration/DataSecurity` | DSGVO-Bereinigung, Recht auf Löschung, Datenschutz-Reports |
|
||||
| 6 | Administration - Licensing | `Centron.BL/Administration/Licensing` | Lizenzverwaltung des c-entron-Systems |
|
||||
| 7 | Administration - Employees | `Centron.BL/Administration/Employees` | Mitarbeiterstammdaten (Verwaltungssicht) |
|
||||
| 8 | Administration - Masterdata | `Centron.BL/Administration/Masterdata` | Systemweite Stammdatenverwaltung |
|
||||
| 9 | Administration - Company/CompanyInformations | `Centron.BL/Administration/Company*` | Mandanten-/Firmenstammdaten |
|
||||
| 10 | Administration - Settings/Customization/Themes | `Centron.BL/Administration/{Settings,Customization,Themes}` | Systemkonfiguration, Individualisierung, UI-Themes |
|
||||
| 11 | Administration - AccessTokens | `Centron.BL/Administration/AccessTokens` | API-Zugriffstoken-Verwaltung |
|
||||
| 12 | Administration - BackgroundServices | `Centron.BL/Administration/BackgroundServices` | Hintergrunddienste/Scheduler |
|
||||
| 13 | Administration - BookKeepingAccountSystems | `Centron.BL/Administration/BookKeepingAccountSystems` | Buchhaltungskontenrahmen-Konfiguration |
|
||||
| 14 | Administration - CentronConfigDb | `Centron.BL/Administration/CentronConfigDb` | Zentrale Konfigurationsdatenbank |
|
||||
| 15 | Administration - Connections | `Centron.BL/Administration/Connections` | Verbindungs-/Umgebungskonfiguration |
|
||||
| 16 | Administration - Documents | `Centron.BL/Administration/Documents` | Dokumentenverwaltung (Administration) |
|
||||
| 17 | Administration - Environments | `Centron.BL/Administration/Environments` | Umgebungsverwaltung (Test/Prod) |
|
||||
| 18 | Administration - FileManagement | `Centron.BL/Administration/FileManagement` | Dateiablage-Verwaltung |
|
||||
| 19 | Administration - NetworkDiagnostics | `Centron.BL/Administration/NetworkDiagnostics` | Netzwerkdiagnose-Werkzeuge |
|
||||
| 20 | Administration - PerformanceTests | `Centron.BL/Administration/PerformanceTests` | Systemperformance-Tests |
|
||||
| 21 | Administration - PhoneSettings | `Centron.BL/Administration/PhoneSettings` | Telefonanlagen-Konfiguration |
|
||||
| 22 | Administration - Portal | `Centron.BL/Administration/Portal` | Portalkonfiguration |
|
||||
| 23 | Administration - Profiling | `Centron.BL/Administration/Profiling` | Laufzeit-Profiling |
|
||||
| 24 | Administration - SQLManagement/Scripts | `Centron.BL/Administration/{SQLManagement,Scripts}` | DB-Wartungsskripte, SQL-Verwaltung |
|
||||
| 25 | Administration - WebServiceConfiguration | `Centron.BL/Administration/WebServiceConfiguration` | Konfiguration der Webservice-Schicht |
|
||||
| 26 | Administration - ArtificialIntelligence (Adm.) | `Centron.BL/Administration/ArtificialIntelligence` | KI-Konfiguration auf Administrationsebene |
|
||||
| 27 | Administration - Applications | `Centron.BL/Administration/Applications` | Anwendungs-/Modulfreischaltung |
|
||||
| 28 | Administration - Mandatory | `Centron.BL/Administration/Mandatory` | Pflichtfeld-/Mandantenregeln |
|
||||
| 29 | AppointmentRequests | `Centron.BL/AppointmentRequests` | Terminanfragen (Kundenportal) |
|
||||
| 30 | ArtificialIntelligence | `Centron.BL/ArtificialIntelligence` | KI-Chat-Integration (OpenAI-kompatible API-Clients) |
|
||||
| 31 | BusinessPartner | `Centron.BL/BusinessPartner` | Lieferantensuche, Lieferanten-Assets |
|
||||
| 32 | Buying | `Centron.BL/Buying` | Externer Einkauf/Beschaffung |
|
||||
| 33 | CPra | `Centron.BL/CPra` | CPra-Konnektor (externe Schnittstelle) |
|
||||
| 34 | Calendar | `Centron.BL/Calendar` | Kalenderverwaltung |
|
||||
| 35 | CentronIcons | `Centron.BL/CentronIcons` | Icon-Verwaltung für UI/Webservice |
|
||||
| 36 | CentronNexus (BL) | `Centron.BL/CentronNexus` | Backend-Anbindung für Nexus-Webportal |
|
||||
| 37 | ChangeTracking | `Centron.BL/ChangeTracking` | Änderungshistorie von Datensätzen |
|
||||
| 38 | Chats | `Centron.BL/Chats` | Interner Chat |
|
||||
| 39 | CheckListArea | `Centron.BL/CheckListArea` | Checklisten, Update-Checklisten |
|
||||
| 40 | Core | `Centron.BL/Core` | Kryptografie-Hilfsfunktionen, Textersetzung |
|
||||
| 41 | CountryArea | `Centron.BL/CountryArea` | Länder-/Bundesländerstammdaten |
|
||||
| 42 | CustomerArea | `Centron.BL/CustomerArea` | Branchen, Kontaktaktivitäten, RMA-Verwaltung |
|
||||
| 43 | Customizations | `Centron.BL/Customizations` | Benutzerdefinierte Tabellen (Custom Tables) |
|
||||
| 44 | DataExchange | `Centron.BL/DataExchange` | Buchhaltungsexport, EDI-Konnektoren, GfK-Export, Zahlungsverkehr, DocuForm |
|
||||
| 45 | Devices | `Centron.BL/Devices` | Gerätezuordnung zu Konten |
|
||||
| 46 | DocuBoard | `Centron.BL/DocuBoard` | Asset-Management-Board (Zuordnung von Geräten/Nutzern) |
|
||||
| 47 | DocumentationArea | `Centron.BL/DocumentationArea` | Dokumentationsverwaltung |
|
||||
| 48 | EDI | `Centron.BL/EDI` | Lieferanten-EDI (ALSO, Alltron, EGIS, Komsa, Opentrans, ZUGFeRD, u.a.) |
|
||||
| 49 | EmployeeArea | `Centron.BL/EmployeeArea` | Mitarbeiterverwaltung, Benutzerkonten, Urlaub, RFID |
|
||||
| 50 | Exceptions | `Centron.BL/Exceptions` | Fachliche Exception-Typen |
|
||||
| 51 | ExpectedEvents | `Centron.BL/ExpectedEvents` | Erwartete Ereignisse/Erinnerungen |
|
||||
| 52 | ExternalHelpdesk | `Centron.BL/ExternalHelpdesk` | Anbindung externer Helpdesk-Systeme |
|
||||
| 53 | ExternalToolsBL | `Centron.BL/ExternalToolsBL` | Verwaltung externer Werkzeuge |
|
||||
| 54 | Finances | `Centron.BL/Finances` | Zahlungseingänge, Online-Banking, Produktlebenszyklus |
|
||||
| 55 | GUI | `Centron.BL/GUI` | UI-Profile, Import-Unterstützung |
|
||||
| 56 | Gateway | `Centron.BL/Gateway` | Custom-Gateway-Anbindung |
|
||||
| 57 | Helpers | `Centron.BL/Helpers` | Technische Hilfsklassen (Bild-, PDF-, Wortverarbeitung) |
|
||||
| 58 | IndexSearch | `Centron.BL/IndexSearch` | Volltextsuche (Lucene-basiert, deutscher Analyzer) |
|
||||
| 59 | Integrations | `Centron.BL/Integrations` | Externe Rollen-/Kundengruppen-Integration |
|
||||
| 60 | ItPlanner | `Centron.BL/ItPlanner` | Checklisten-Kategorien für virtuelle Objekte |
|
||||
| 61 | Logistics | `Centron.BL/Logistics` | Logistikeinstellungen, Lagerlogistik |
|
||||
| 62 | Mail | `Centron.BL/Mail` | E-Mail-Versand, Vorlagen, Blacklist, Exchange-Anbindung |
|
||||
| 63 | MailScanner | `Centron.BL/MailScanner` | Posteingangsscanner |
|
||||
| 64 | Mailings | `Centron.BL/Mailings` | Massen-Mailings, Mailing-Vorlagen |
|
||||
| 65 | MassUpdate | `Centron.BL/MassUpdate` | Massenänderungen an Datensätzen |
|
||||
| 66 | Mobile | `Centron.BL/Mobile` | Mobile-App-Anbindung |
|
||||
| 67 | Modules | `Centron.BL/Modules` | Modulkatalog/-kategorien des Systems selbst |
|
||||
| 68 | MyCentron | `Centron.BL/MyCentron` | Persönliches Dashboard, Notizen, Terminplanung |
|
||||
| 69 | MyDay | `Centron.BL/MyDay` | Tagesübersicht, Supremo-Fernwartungsanbindung |
|
||||
| 70 | NexusNotifications | `Centron.BL/NexusNotifications` | Push-Benachrichtigungen für Nexus-Webportal |
|
||||
| 71 | NexusTicketViews | `Centron.BL/NexusTicketViews` | Ticket-Ansichten im Webportal |
|
||||
| 72 | Notifications | `Centron.BL/Notifications` | Systembenachrichtigungen an Benutzer |
|
||||
| 73 | ObjectExternalReferences | `Centron.BL/ObjectExternalReferences` | Verknüpfung von Objekten mit externen Referenzen |
|
||||
| 74 | Outlook | `Centron.BL/Outlook` | Outlook-Add-in-Anbindung |
|
||||
| 75 | PasswordManagementArea | `Centron.BL/PasswordManagementArea` | Interner Passworttresor mit Zugriffsprotokoll |
|
||||
| 76 | PasswordManager | `Centron.BL/PasswordManager` | Passwortverwaltung (Kernlogik) |
|
||||
| 77 | Processes | `Centron.BL/Processes` | Geschäftsprozessverwaltung |
|
||||
| 78 | ProductMatrix | `Centron.BL/ProductMatrix` | Produktmatrix-Konfiguration |
|
||||
| 79 | Production | `Centron.BL/Production` | Fertigungsaufträge |
|
||||
| 80 | Projects | `Centron.BL/Projects` | Projektverwaltung |
|
||||
| 81 | Purchasing | `Centron.BL/Purchasing` | Bestellvorschläge, Lieferanten, Filialzuordnung von Bestellungen |
|
||||
| 82 | ReportEngine | `Centron.BL/ReportEngine` | Reportgenerierung (PDF-Export, FastReport-Integration) |
|
||||
| 83 | Reporting | `Centron.BL/Reporting` | Report-Verwaltung |
|
||||
| 84 | Resources | `Centron.BL/Resources` | Lokalisierte Strings, FTP-URLs |
|
||||
| 85 | RiverDivo | `Centron.BL/RiverDivo` | RiverSuite-Konnektor (externe Vertragsverwaltung) |
|
||||
| 86 | Sales - Receipts | `Centron.BL/Sales/Receipts` | Belegwesen: Angebote, Aufträge, Lieferscheine, Rechnungen (klassisch) |
|
||||
| 87 | Sales - CustomerAssets/Invoices | `Centron.BL/Sales/CustomerAssets/Invoices` | Rechnungsstellung auf Kundenanlagen (Assets) |
|
||||
| 88 | Sales - CustomerAssets/AutomaticFactura | `Centron.BL/Sales/CustomerAssets/AutomaticFactura` | Automatische Fakturierung (Vertrags-/Massenabrechnung) |
|
||||
| 89 | Sales - CustomerAssets/Orders | `Centron.BL/Sales/CustomerAssets/Orders` | Auftragsverwaltung auf Kundenanlagen |
|
||||
| 90 | Sales - CustomerAssets/Contracts | `Centron.BL/Sales/CustomerAssets/Contracts` | Vertragsverwaltung, Click-Verträge, Zählerstände |
|
||||
| 91 | Sales - CustomerAssets/CreditVouchers | `Centron.BL/Sales/CustomerAssets/CreditVouchers` | Gutschriften |
|
||||
| 92 | Sales - CustomerAssets/TimerBilling | `Centron.BL/Sales/CustomerAssets/TimerBilling` | Zeitbasierte Abrechnung |
|
||||
| 93 | Sales - CashBooks | `Centron.BL/Sales/CashBooks` | Kassenbuchführung |
|
||||
| 94 | Sales - Marketing/Support/Calendar | `Centron.BL/Sales/{Marketing,Support,Calendar}` | Vertriebsnahe Zusatzfunktionen |
|
||||
| 95 | Security | `Centron.BL/Security` | PDF-Signatur |
|
||||
| 96 | SelfCare | `Centron.BL/SelfCare` | Kunden-Selbstbedienungsportal |
|
||||
| 97 | Services | `Centron.BL/Services` | Cache-Verwaltung, Datenqualität, Workflows, CTime-Anbindung |
|
||||
| 98 | SocialMedia | `Centron.BL/SocialMedia` | Social-Media-Anbindung |
|
||||
| 99 | Start | `Centron.BL/Start` | Anwendungsstart-Logik |
|
||||
| 100 | Statistics | `Centron.BL/Statistics` | Auswertungen (Umsatz, MSP, Vertrag, Ticket) |
|
||||
| 101 | Storage | `Centron.BL/Storage` | Lagerbestandsverwaltung |
|
||||
| 102 | SystemArea | `Centron.BL/SystemArea` | Systemtabellen-Zugriff (I3D-Kernel) |
|
||||
| 103 | Tags | `Centron.BL/Tags` | Tagging-System |
|
||||
| 104 | Tapi | `Centron.BL/Tapi` | Telefonanlagen-Integration (TAPI) |
|
||||
| 105 | TaskManager | `Centron.BL/TaskManager` | Aufgabenverwaltung mit Aktions-Handlern |
|
||||
| 106 | Telemetry | `Centron.BL/Telemetry` | Nutzungstelemetrie |
|
||||
| 107 | TextModuleArea | `Centron.BL/TextModuleArea` | Textbausteine, Anrede-/Grußformel-Ersetzung |
|
||||
| 108 | TicketProjects | `Centron.BL/TicketProjects` | Ticket-Projekt-Zuordnung |
|
||||
| 109 | Time | `Centron.BL/Time` | Zeiterfassungseinstellungen |
|
||||
| 110 | ToDoArea | `Centron.BL/ToDoArea` | To-Do-Verwaltung |
|
||||
| 111 | Tools | `Centron.BL/Tools` | Werkzeugkatalog |
|
||||
| 112 | TradePool | `Centron.BL/TradePool` | Handelspool (Warenaustausch zwischen Standorten) |
|
||||
| 113 | Transactions | `Centron.BL/Transactions` | Transaktionsverwaltung |
|
||||
| 114 | TwoFactorAuthenticator | `Centron.BL/TwoFactorAuthenticator` | Zwei-Faktor-Authentifizierung |
|
||||
| 115 | Urls | `Centron.BL/Urls` | Kurz-/einfache URL-Verwaltung |
|
||||
| 116 | VideoPortal | `Centron.BL/VideoPortal` | Video-Schulungsportal-Zuordnung |
|
||||
| 117 | VoucherManagement | `Centron.BL/VoucherManagement` | Gutscheinverwaltung |
|
||||
| 118 | Warehousing | `Centron.BL/Warehousing` | Artikelstamm, Lagerverwaltung, Kommissionierung, Stückliste |
|
||||
| 119 | WebLinks | `Centron.BL/WebLinks` | Weblink-Aktionen (z. B. Bestätigungslinks in Mails) |
|
||||
| 120 | WebSuite | `Centron.BL/WebSuite` | Web-Suite-Administration |
|
||||
| 121 | WebVersion | `Centron.BL/WebVersion` | Versionsinformationen |
|
||||
|
||||
### B. Technische Querschnittskomponenten
|
||||
|
||||
| # | Komponente | Pfad | Fachliche/technische Aufgabe |
|
||||
|---|---|---|---|
|
||||
| 122 | WPF-Desktopclient | `src/centron/Centron.WPF.UI` | Windows-Rich-Client (Hauptanwendung `c-entron.NET`) |
|
||||
| 123 | Nexus-Webportal | `src/nexus/CentronNexus` (Blazor) | Web-/Kundenportal, WebCart, WebOffer, Servicetickets |
|
||||
| 124 | Nexus-Host / OutlookAddIn | `src/nexus/CentronNexus.Host`, `CentronNexus.OutlookAddIn` | Hosting des Webportals, Outlook-Add-in |
|
||||
| 125 | REST-API-Controller | `src/webservice/Centron.Controllers` | HTTP-API-Schicht mit Autorisierungsfiltern |
|
||||
| 126 | Webservice-Host | `src/webservice/Centron.Host*` | Hosting der Webservice-Schicht (Konsole/Windows-Dienst) |
|
||||
| 127 | Datenzugriffsschicht (DAO) | `src/backend/Centron.DAO` | NHibernate-basierter Datenzugriff, Mappings, Sessions |
|
||||
| 128 | Entitätsmodell | `src/backend/Centron.Entities` | Domänenmodell/ORM-Entitäten |
|
||||
| 129 | Gateway | `src/backend/Centron.Gateway` | Zentrales Gateway zwischen Client und Backend |
|
||||
| 130 | Externe API-Clients | `src/apis/*` (Cop, Egis, FinAPI, ITscope, Icecat, EbInterface, Gls, Shipcloud) | Anbindung externer Datenlieferanten/Versanddienstleister |
|
||||
| 131 | Gemeinsame Bibliotheken | `src/shared/{Centron.Core,Centron.Controls*}` | Gemeinsame Controls und Kernbibliothek für UI |
|
||||
| 132 | Common | `src/backend/Centron.Common` | Technische Querschnittsfunktionen |
|
||||
| 133 | Interfaces | `src/backend/Centron.Interfaces` | Vertragsschnittstellen zwischen Schichten |
|
||||
|
||||
**Hinweis:** Die Nummerierung dient ausschließlich der Referenzierung in diesem Bericht, nicht der Anforderungs-ID.
|
||||
|
||||
## Abdeckungstabelle (Schritt 0b/0c-Ergebnis)
|
||||
|
||||
Legende: **tief** = mehrstufige StRS→SyRS→SwRS-Kette mit vertiefter Recherche; **mittel** = eigene
|
||||
Anforderung mit mehrfacher Codeprüfung oder Verknüpfung zu einem Nachbarmodul; **flach** = eine
|
||||
Anforderung auf Basis einer einzelnen, meist kurzen Codeprüfung (Mindestabdeckung); **nicht
|
||||
analysiert** = keine belegbare Anforderung möglich, mit Begründung.
|
||||
|
||||
| # | Modul | Tiefe | Anforderungs-IDs |
|
||||
|---|---|---|---|
|
||||
| 1 | Accounting | flach | SwRS-013 |
|
||||
| 2 | Accounts | mittel | StRS-010 |
|
||||
| 3 | Administration - Rights | **tief** | StRS-001, SyRS-001, SwRS-001, SwRS-002 |
|
||||
| 4 | Administration - Logins | **tief** | StRS-002, SyRS-002, SwRS-004, SwRS-028, SwRS-046, SwRS-057 |
|
||||
| 5 | Administration - DataSecurity | **tief** | StRS-004, SyRS-005, SwRS-006 |
|
||||
| 6 | Administration - Licensing | nicht analysiert | Begründung: `LicenseManager.cs`/`FakeOfficeClient.cs` nur oberflächlich gesichtet, keine belegbare Aussage ohne tiefere Prüfung der Lizenzprüf-Logik ableitbar; Zeitbudget in Iteration 02 auf Risikomodule priorisiert. |
|
||||
| 7 | Administration - Employees | flach | SwRS-021 |
|
||||
| 8 | Administration - Masterdata | mittel | SwRS-022 |
|
||||
| 9 | Administration - Company/CompanyInformations | flach | SwRS-023, SwRS-024 |
|
||||
| 10 | Administration - Settings/Customization/Themes | flach | SwRS-025, SwRS-026, SwRS-027 |
|
||||
| 11 | Administration - AccessTokens | flach | SwRS-028 |
|
||||
| 12 | Administration - BackgroundServices | flach | SwRS-029 |
|
||||
| 13 | Administration - BookKeepingAccountSystems | flach | SwRS-030 |
|
||||
| 14 | Administration - CentronConfigDb | mittel | SwRS-020 |
|
||||
| 15 | Administration - Connections | flach | SwRS-031 |
|
||||
| 16 | Administration - Documents | flach (HYPOTHESE) | SwRS-032 |
|
||||
| 17 | Administration - Environments | flach | SwRS-033 |
|
||||
| 18 | Administration - FileManagement | flach | SwRS-034 |
|
||||
| 19 | Administration - NetworkDiagnostics | flach | SwRS-035 |
|
||||
| 20 | Administration - PerformanceTests | flach (HYPOTHESE) | SwRS-036 |
|
||||
| 21 | Administration - PhoneSettings | flach | SwRS-037 |
|
||||
| 22 | Administration - Portal | flach (HYPOTHESE) | SwRS-038 |
|
||||
| 23 | Administration - Profiling | flach (HYPOTHESE) | SwRS-039 |
|
||||
| 24 | Administration - SQLManagement/Scripts | flach (HYPOTHESE) | SwRS-040, SwRS-041 |
|
||||
| 25 | Administration - WebServiceConfiguration | flach (HYPOTHESE) | SwRS-042 |
|
||||
| 26 | Administration - ArtificialIntelligence (Adm.) | flach | SwRS-043 |
|
||||
| 27 | Administration - Applications | flach (HYPOTHESE) | SwRS-044 |
|
||||
| 28 | Administration - Mandatory | flach (HYPOTHESE) | SwRS-045 |
|
||||
| 29 | AppointmentRequests | mittel | StRS-009, SwRS-011 |
|
||||
| 30 | ArtificialIntelligence | flach | SwRS-014 |
|
||||
| 31 | BusinessPartner | flach | SwRS-015 |
|
||||
| 32 | Buying | flach | SwRS-016 |
|
||||
| 33 | CPra | mittel | SyRS-010, SwRS-012 |
|
||||
| 34 | Calendar | flach | SwRS-017 |
|
||||
| 35 | CentronIcons | flach | SwRS-018 |
|
||||
| 36 | CentronNexus (BL) | flach | SwRS-019 |
|
||||
| 37 | ChangeTracking | flach | SwRS-047 |
|
||||
| 38 | Chats | flach | StRS-013 |
|
||||
| 39 | CheckListArea | flach | SwRS-048 |
|
||||
| 40 | Core | mittel | SwRS-046 |
|
||||
| 41 | CountryArea | flach | SwRS-051 |
|
||||
| 42 | CustomerArea | mittel | StRS-011 |
|
||||
| 43 | Customizations | flach | SwRS-052 |
|
||||
| 44 | DataExchange | flach (HYPOTHESE) | SwRS-049 |
|
||||
| 45 | Devices | flach | SwRS-053 |
|
||||
| 46 | DocuBoard | flach | SwRS-054 |
|
||||
| 47 | DocumentationArea | mittel (HYPOTHESE) | SwRS-055 |
|
||||
| 48 | EDI | mittel | SwRS-056 |
|
||||
| 49 | EmployeeArea | flach | StRS-012 |
|
||||
| 50 | Exceptions | flach | SwRS-057 |
|
||||
| 51 | ExpectedEvents | flach (HYPOTHESE) | SwRS-058 |
|
||||
| 52 | ExternalHelpdesk | flach | SwRS-059 |
|
||||
| 53 | ExternalToolsBL | flach | SwRS-060 |
|
||||
| 54 | Finances | flach | SwRS-050 |
|
||||
| 55 | GUI | flach | SwRS-062 |
|
||||
| 56 | Gateway (BL) | flach | SwRS-061 |
|
||||
| 57 | Helpers | flach (HYPOTHESE) | SwRS-076 |
|
||||
| 58 | IndexSearch | flach | SwRS-063 |
|
||||
| 59 | Integrations | flach | SwRS-064 |
|
||||
| 60 | ItPlanner | flach | SwRS-122 |
|
||||
| 61 | Logistics | mittel | SyRS-011 |
|
||||
| 62 | Mail | mittel | SwRS-065, SwRS-066 |
|
||||
| 63 | MailScanner | flach | SwRS-067 |
|
||||
| 64 | Mailings | flach | SwRS-068 |
|
||||
| 65 | MassUpdate | flach | SwRS-069 |
|
||||
| 66 | Mobile | flach | SwRS-070 |
|
||||
| 67 | Modules | flach | SwRS-071 |
|
||||
| 68 | MyCentron | flach | StRS-021 |
|
||||
| 69 | MyDay | mittel | StRS-014 |
|
||||
| 70 | NexusNotifications | flach | SwRS-072 |
|
||||
| 71 | NexusTicketViews | flach | SwRS-123 |
|
||||
| 72 | Notifications | flach (HYPOTHESE) | SwRS-073 |
|
||||
| 73 | ObjectExternalReferences | flach | SwRS-074 |
|
||||
| 74 | Outlook | flach | SwRS-075 |
|
||||
| 75 | PasswordManagementArea | **tief** | StRS-005, SyRS-006, SwRS-007, SwRS-020 |
|
||||
| 76 | PasswordManager | mittel | StRS-015 |
|
||||
| 77 | Processes | flach | SwRS-077 |
|
||||
| 78 | ProductMatrix | flach | SwRS-078 |
|
||||
| 79 | Production | flach | SwRS-079 |
|
||||
| 80 | Projects | flach | SwRS-080 |
|
||||
| 81 | Purchasing | mittel | StRS-016, SwRS-081 |
|
||||
| 82 | ReportEngine | flach | SwRS-083 |
|
||||
| 83 | Reporting | flach | SwRS-082 |
|
||||
| 84 | Resources | flach (HYPOTHESE) | SwRS-112 |
|
||||
| 85 | RiverDivo | mittel | SyRS-012 |
|
||||
| 86 | Sales - Receipts | flach | SwRS-094 |
|
||||
| 87 | Sales - CustomerAssets/Invoices | **tief** | StRS-007, StRS-008, SyRS-008, SyRS-009, SwRS-009, SwRS-010, SwRS-099 |
|
||||
| 88 | Sales - CustomerAssets/AutomaticFactura | **tief** | StRS-006, SyRS-007, SwRS-008 |
|
||||
| 89 | Sales - CustomerAssets/Orders | flach | SwRS-095 |
|
||||
| 90 | Sales - CustomerAssets/Contracts | mittel | SwRS-096 |
|
||||
| 91 | Sales - CustomerAssets/CreditVouchers | flach (HYPOTHESE) | SwRS-097 |
|
||||
| 92 | Sales - CustomerAssets/TimerBilling | flach | SwRS-098 |
|
||||
| 93 | Sales - CashBooks | mittel | SwRS-099 |
|
||||
| 94 | Sales - Marketing/Support/Calendar | **tief** | StRS-019, SwRS-100, SwRS-104 |
|
||||
| 95 | Security | mittel | StRS-017 |
|
||||
| 96 | SelfCare | flach | SwRS-084 |
|
||||
| 97 | Services | flach | SwRS-085 |
|
||||
| 98 | SocialMedia | flach | SwRS-101 |
|
||||
| 99 | Start | **nicht analysiert** | Begründung: beide Methoden von `StartBL` bestehen ausschließlich aus auskommentiertem Code ohne aktive Anweisung (siehe SwRS-113); es lässt sich keine wirksame Anforderung ableiten. |
|
||||
| 100 | Statistics | mittel | StRS-018 |
|
||||
| 101 | Storage | flach | SwRS-086 |
|
||||
| 102 | SystemArea | flach (HYPOTHESE) | SwRS-102 |
|
||||
| 103 | Tags | flach | SwRS-087 |
|
||||
| 104 | Tapi | flach | SwRS-103 |
|
||||
| 105 | TaskManager | flach | SwRS-088 |
|
||||
| 106 | Telemetry | flach | SwRS-124 |
|
||||
| 107 | TextModuleArea | flach | SwRS-089 |
|
||||
| 108 | TicketProjects | flach (HYPOTHESE) | SwRS-104 |
|
||||
| 109 | Time | flach | SwRS-105 |
|
||||
| 110 | ToDoArea | flach | SwRS-090 |
|
||||
| 111 | Tools | flach (HYPOTHESE) | SwRS-106 |
|
||||
| 112 | TradePool | flach | SwRS-091 |
|
||||
| 113 | Transactions | flach | SwRS-092 |
|
||||
| 114 | TwoFactorAuthenticator | **tief** | StRS-003, SyRS-004, SwRS-005 |
|
||||
| 115 | Urls | flach | SwRS-107 |
|
||||
| 116 | VideoPortal | flach | SwRS-108 |
|
||||
| 117 | VoucherManagement | flach | SwRS-093 |
|
||||
| 118 | Warehousing | mittel | SyRS-013, StRS-020 |
|
||||
| 119 | WebLinks | flach | SwRS-109 |
|
||||
| 120 | WebSuite | flach | SwRS-110 |
|
||||
| 121 | WebVersion | flach | SwRS-111 |
|
||||
| 122 | WPF-Desktopclient | flach (HYPOTHESE) | SyRS-014 |
|
||||
| 123 | Nexus-Webportal | mittel | SyRS-015 |
|
||||
| 124 | Nexus-Host / OutlookAddIn | **nicht analysiert** | Begründung: reine Hosting-/Wrapper-Projekte ohne eigene Fachlogik; die von ihnen gehostete Funktionalität ist bereits über Modul #123 (Nexus-Webportal) und Modul #74 (Outlook, `OutlookAssetKindSearchBL`) mit Anforderungen abgedeckt. Eine gesonderte Anforderung würde nur die Existenz des Hostprozesses wiederholen. |
|
||||
| 125 | REST-API-Controller | **tief** | SyRS-003, SwRS-003 |
|
||||
| 126 | Webservice-Host | flach (HYPOTHESE) | SwRS-119 |
|
||||
| 127 | Datenzugriffsschicht (DAO) | mittel | SwRS-114 |
|
||||
| 128 | Entitätsmodell | flach (HYPOTHESE) | SwRS-115 |
|
||||
| 129 | Gateway (src, technisch) | flach (HYPOTHESE) | SwRS-116 |
|
||||
| 130 | Externe API-Clients | flach | SwRS-117 |
|
||||
| 131 | Gemeinsame Bibliotheken | flach (HYPOTHESE) | SwRS-118 |
|
||||
| 132 | Common | flach (HYPOTHESE) | SwRS-120 |
|
||||
| 133 | Interfaces | flach (HYPOTHESE) | SwRS-121 |
|
||||
|
||||
**Summe:** 133 Inventarzeilen; **130 mit mindestens einer Anforderung abgedeckt**, **3 als `nicht
|
||||
analysiert` mit Begründung geführt** (Zeile 6 „Licensing", Zeile 99 „Start", Zeile 124
|
||||
„Nexus-Host/OutlookAddIn"). Damit ist die in Schritt 0b geforderte Mindestabdeckung **vollständig
|
||||
erreicht**: jede Zeile trägt entweder mindestens eine Anforderung oder eine dokumentierte
|
||||
Begründung.
|
||||
|
||||
## Konsistenzcheck
|
||||
|
||||
- **Doppelte oder mehrfach vergebene IDs:** Keine gefunden. Alle IDs wurden lückenlos und ohne
|
||||
Wiederholung vergeben: StRS-001…021 (21), SyRS-001…015 (15), SwRS-001…124 (124). Geprüft durch
|
||||
vollständige `grep`-Extraktion aller `ID:`-Zeilen aus den drei Dateien und visuellen Abgleich auf
|
||||
Lücken/Dopplungen - keine Auffälligkeiten.
|
||||
- **Anforderungen ohne Beleg:** Keine. Jede der 160 Anforderungen trägt mindestens einen Eintrag im
|
||||
Feld `Belege` (PRIMÄR, SEKUNDÄR oder KONTEXT).
|
||||
- **Anforderungen ohne Angabe zur `Übernahmewürdigkeit`:** Keine. Jede Anforderung trägt eine der
|
||||
vier Einstufungen (`übernehmen`, `Workaround`, `Sonderfall`, `veraltet`) mit Begründung -
|
||||
einschließlich der beiden funktionslosen Sonderfälle (SwRS-113 „Start": `veraltet`) und der
|
||||
beiden hypothesenbehafteten Sicherheitsfunde (StRS-005: `Workaround`).
|
||||
- **Tracelinks auf nicht existierende IDs:** Keine gefunden. Alle referenzierten IDs in
|
||||
`Tracelinks`-Feldern (u. a. SwRS-096→StRS-006, SwRS-099→SyRS-009, SwRS-104→StRS-019,
|
||||
SyRS-013→StRS-001, SyRS-015→SyRS-003) wurden gegen die tatsächlich vergebenen IDs geprüft und
|
||||
existieren alle.
|
||||
- **Inhaltlich deckungsgleiche Anforderungen ohne Konsolidierungsvermerk:** Bei der Erstellung
|
||||
wurden erkannte Überschneidungen laufend im Feld `Konsolidierung` vermerkt (u. a. SwRS-008/SwRS-094
|
||||
zweite Belegwelt, SwRS-053/SwRS-054 Stammblatt/Asset-Beispiel, SwRS-056/SwRS-116 EDI-Doppelstruktur,
|
||||
SwRS-009/SwRS-022, SwRS-048/SwRS-068 Kompaktmuster). Eine abschließende Prüfung aller 160×159
|
||||
Paarungen auf verbleibende, nicht vermerkte Deckungsgleichheit wurde aus Zeitgründen nicht
|
||||
vollständig automatisiert durchgeführt; die o. g. Fälle wurden manuell beim Schreiben erkannt.
|
||||
**Bekannte Lücke:** eine systematische Nachprüfung aller Konsolidierungskandidaten ist für eine
|
||||
Folge-Iteration vorgesehen (siehe Selbstbewertung).
|
||||
- **Risikorelevante Anforderungen (Sicherheit, Abrechnung/Fakturierung, Berechtigungen) mit
|
||||
Belegsituation:**
|
||||
|
||||
| ID | Titel | PRIMÄR-Beleg? | Kennzeichnung |
|
||||
|---|---|---|---|
|
||||
| StRS-001 | Rollen-/rechtebasierte Zugriffssteuerung | ja | belegt |
|
||||
| SyRS-001 | Serverseitige Rechteprüfung vor jeder geschützten Operation | ja | belegt |
|
||||
| SwRS-001 | Rechteprüfung über Sichtrus/Sichmemb | ja | belegt |
|
||||
| SwRS-002 | Fail-Closed-Verhalten der Rechteprüfungs-Extension | ja | belegt |
|
||||
| SyRS-003 | REST-API erzwingt Authentifizierung/Autorisierung | ja | belegt |
|
||||
| SwRS-003 | Deklarativer Autorisierungsfilter REST-Controller | ja | belegt |
|
||||
| StRS-002 | Verpflichtende Anmeldung | ja | belegt |
|
||||
| SyRS-002 | Ermittlung Benutzerkontext aus Anmeldenachweis | ja | belegt |
|
||||
| SwRS-004 | Mehrstufige Ticket-/Token-Auflösung | ja | belegt |
|
||||
| StRS-003 | Zwei-Faktor-Authentifizierung | ja | belegt |
|
||||
| SyRS-004 / SwRS-005 | Zweistufige Authentifizierung / PIN-Validierung | ja | belegt |
|
||||
| StRS-004 / SyRS-005 / SwRS-006 | DSGVO-Löschrecht | ja | belegt |
|
||||
| SwRS-032 | DSGVO-bezogene Dokumentenverwaltung | **nein** (nur KONTEXT) | **[HYPOTHESE]** |
|
||||
| StRS-005 / SyRS-006 | Verschlüsselte Ablage Zugangsdaten | **nein** (nur KONTEXT) | **[HYPOTHESE]** |
|
||||
| SwRS-007 | Zugriffsprotokoll Passwort-Schlüsseleintrag | ja | belegt |
|
||||
| SwRS-020 | Master-Schlüssel-Speicherung | ja | belegt |
|
||||
| StRS-015 | Passwortrichtlinien für Kundenmitarbeiter | ja | belegt |
|
||||
| SwRS-046 | SHA1-basierte Salt-Ableitung | ja | belegt (Befund: veraltetes Verfahren, siehe `Übernahmewürdigkeit: Workaround`) |
|
||||
| SwRS-055 | Rechteprüfung Dokumentationsabruf mit Umgehungsoption | ja (Existenz des Parameters) | **[HYPOTHESE]** (Ausnutzung nicht verifiziert) |
|
||||
| SwRS-066 | Domänen-Blacklist ausgehende Mails | ja | **[HYPOTHESE]** (Durchsetzung an jeder Versandstelle nicht verifiziert) |
|
||||
| SyRS-013 | Artikelbezogene Rechteprüfung (Warehousing) | ja | belegt |
|
||||
| StRS-017 | Digitale PDF-Signatur | ja | belegt |
|
||||
| StRS-006/007/008, SyRS-007/008/009, SwRS-008/009/010 | Fakturierung/Fälligkeit/Kassenbuch | ja | belegt |
|
||||
| SwRS-096 | Vertragskontingent-Restberechnung | ja | belegt |
|
||||
| SwRS-097 | Gutschriften-Abschlusszustand | ja (Existenz) | **[HYPOTHESE]** (Schreibschutz nach Abschluss nicht verifiziert) |
|
||||
| SwRS-099 | Kassenbuch objektbezogene Buchungsauflösung | ja | belegt |
|
||||
|
||||
**Ergebnis:** 21 von 26 risikorelevanten Anforderungen(-gruppen) sind mit `PRIMÄR`-Beleg
|
||||
geführt; die verbleibenden 5 (SwRS-032, StRS-005/SyRS-006, SwRS-055, SwRS-066, SwRS-097) sind
|
||||
korrekt als `[HYPOTHESE]` gekennzeichnet (kein Verstoß gegen die risikobasierte
|
||||
Priorisierungsregel - genau das vorgeschriebene Verhalten bei fehlendem PRIMÄR-Beleg).
|
||||
- **Abgleich `Hypothesen.md` gegen Inline-Markierungen:** `Hypothesen.md` führt exakt 31 Einträge,
|
||||
identisch mit der Anzahl der `Status: HYPOTHESE`-Vorkommen in `StRS.md`/`SyRS.md`/`SwRS.md`
|
||||
(1 + 1 + 29). Keine zusätzlichen freien Fragen ohne Anforderungsbezug enthalten.
|
||||
|
||||
## Selbstbewertung
|
||||
|
||||
**Analysetiefe (absolute Zahlen):** Von 133 Inventarzeilen wurden **9 tief**, **17 mittel**, **104
|
||||
flach** und **3 nicht analysiert** (mit Begründung: Start, Nexus-Host/OutlookAddIn, Licensing)
|
||||
bearbeitet. Insgesamt entstanden **160 Anforderungen** (21 StRS, 15 SyRS, 124 SwRS).
|
||||
|
||||
**Mindestabdeckung erreicht?** Ja, mit den drei begründeten Ausnahmen oben. Jedes andere Modul
|
||||
trägt mindestens eine Anforderung mit mindestens einem Beleg.
|
||||
|
||||
**Wo war der Beleg dünn?** Auffällig gehäuft bei den technischen Administrationsuntermodulen
|
||||
(Zeilen 16-28: Documents, PerformanceTests, Portal, Profiling, SQLManagement, WebServiceConfiguration,
|
||||
Applications, Mandatory) sowie bei den späten Infrastruktur-Modulen (122, 128, 129, 131-133): dort
|
||||
wurde aus Zeitgründen häufig nur ein einzelner Dateiname oder eine einzelne Methodensignatur
|
||||
geprüft (SEKUNDÄR/KONTEXT-Beleg, ohne Implementierungsdetails), was zur `[HYPOTHESE]`-Kennzeichnung
|
||||
führte. Dies ist eine bewusste Konsequenz der Breite-vor-Tiefe-Vorgabe, nicht eine übersehene Lücke.
|
||||
|
||||
**Hypothesenanteil:** 31 von 160 (19,4 %) - das entspricht der im Änderungsprotokoll dieses Prompts
|
||||
kalibrierten, plausiblen Bandbreite (Vorlauf: 0-26,2 % in 24 Läufen) und ist damit weder auffällig
|
||||
niedrig noch auffällig hoch.
|
||||
|
||||
**Wichtigster inhaltlicher Fund:** Der interne Passwort-Tresor (`PasswordManagementArea`,
|
||||
`PasswordManagementKeywordBL.AddNewKeyword`) übergibt den zu speichernden Klartext-Parameter
|
||||
`password` nicht an das `Password`-Feld der Entität (dieses wird stattdessen fest auf `""`
|
||||
gesetzt), und `GetDecryptedKeywordById` enthält nur den Kommentar `// decryption` ohne
|
||||
tatsächlichen Entschlüsselungsaufruf. Da im gesamten `Centron.DAO/UserTypes`-Ordner keine
|
||||
Verschlüsselungs-`UserType`-Klasse existiert, ist unklar, ob diese Funktion in der vorliegenden
|
||||
Codebasis überhaupt wirksam Passwörter persistiert bzw. ob dies verschlüsselt geschieht. Dies ist
|
||||
als StRS-005/SyRS-006 mit `[HYPOTHESE]` geführt und sollte vorrangig in der fachlichen Validierung
|
||||
(Schritt 7) durch Rückfrage bei den Entwicklern geklärt werden - unabhängig davon, ob es sich um
|
||||
einen Bug, unvollständig ausgeliefertem Code oder einen in dieser Codebasis-Kopie bewusst
|
||||
entfernten Sicherheitsmechanismus handelt.
|
||||
|
||||
**Zweitwichtigster Fund:** Das Modul `Sales/Support` (Ticket-/Helpdesk-Verwaltung, ca. 50 Klassen)
|
||||
ist der mit Abstand umfangreichste fachliche Bereich der gesamten Codebasis, war jedoch im
|
||||
ursprünglichen Modulinventar unter „Marketing/Support/Calendar" nur unzureichend sichtbar gemacht
|
||||
worden. Es wurde nachträglich mit StRS-019 als eigener Schwerpunkt geführt, verdient in einer
|
||||
Folge-Iteration jedoch eine eigene, mehrstufige StRS→SyRS→SwRS-Vertiefung (Ticket-Statusmaschine,
|
||||
Eskalationslogik, SLA-Berechnung), vergleichbar mit dem Sicherheits- und Fakturierungs-Cluster
|
||||
dieser Iteration.
|
||||
|
||||
**Weitere Erkenntnisse für eine Folge-Iteration:**
|
||||
1. Vertiefung des Ticket-/Helpdesk-Kerns (`Sales/Support`, s. o.) als eigener Risiko-Cluster
|
||||
(SLA/Eskalation sind zeitkritische Geschäftsregeln, bislang nur mit einer StRS-Anforderung
|
||||
angerissen).
|
||||
2. Klärung der Password-Manager-Verschlüsselungslücke (StRS-005) durch Fachexperten/Entwickler.
|
||||
3. Systematische Prüfung aller `checkRight`-Bypass-Parameter analog zu SwRS-055
|
||||
(`DocumentationBL`) auf weitere Vorkommen in anderen Modulen - dieser Lauf hat nur einen
|
||||
Fundort geprüft, das Muster könnte in der WPF-UI-Schicht weiter verbreitet sein.
|
||||
4. Vollständige, systematische Konsolidierungsanalyse aller 160 Anforderungen gegeneinander
|
||||
(in dieser Iteration nur manuell beim Schreiben erkannte Fälle vermerkt).
|
||||
5. Tiefere Prüfung von Modul #6 (Licensing) und #124 (Nexus-Host/OutlookAddIn), die in dieser
|
||||
Iteration als `nicht analysiert` geführt wurden.
|
||||
6. Vertiefte Prüfung des „Systemartikel"-Musters (StRS-020, Fracht/Rabatt als Pseudo-Artikel) im
|
||||
Hinblick auf eine sauberere Datenmodellierung im Zielsystem.
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
# Glossar - c-entron ERP
|
||||
|
||||
Domänenbegriffe, wie sie in den Anforderungen dieses Berichts verwendet werden. Definitionen
|
||||
sind aus dem Code (Klassen-, Feld-, Tabellennamen) abgeleitet, nicht aus externer Dokumentation.
|
||||
|
||||
| Begriff | Bedeutung im Kontext dieses Systems |
|
||||
|---|---|
|
||||
| **I3D** | Systemweite, technische Primärschlüsselkonvention aus der Delphi-Vorgängerarchitektur (`SystemTableI3DBL`). Nahezu jede Entität besitzt ein `I3D`-Feld als eindeutige ID. |
|
||||
| **AppUser / AppGroup / AppRight** | Kernentitäten des Berechtigungssystems: ein `AppUser` gehört einer oder mehreren `AppGroup`n an, jede Gruppe besitzt zugewiesene `AppRight`e (siehe StRS-001). |
|
||||
| **Sichtrus / Sichmemb** | Datenbanktabellen der Delphi-Alt-Architektur, die die Rechte-Gruppen-Zuordnung (`Sichtrus` = Rechte je Gruppe, `Sichmemb` = Mitgliedschaft Benutzer↔Gruppe) tragen. Wird per Rohsql in `AppRightsBL` abgefragt. |
|
||||
| **WebAccount** | Login-Konto für externe Portalbenutzer (Kunden bzw. „Kunden unserer Kunden") im Nexus-Webportal, getrennt vom internen `AppUser`. Besitzt eigene `WebRight`e. |
|
||||
| **Asset (Kundenanlage)** | Zentrales fachliches Objekt in `Sales/CustomerAssets`: eine beim Kunden installierte/verkaufte Einheit (Gerät, Vertrag, Dienstleistung), an die Aufträge, Rechnungen, Gutschriften und Zeiterfassung gekoppelt sind. |
|
||||
| **Stammblatt** | Historisch getrennte Datenhaltung für Drucker/Hardware außerhalb des Asset-Konzepts (siehe Analyseauftrag-Beispiel); Konsolidierungskandidat mit dem allgemeinen Asset-Konzept im Zielsystem. |
|
||||
| **AssetCondition** | Zahlungskondition, aus der u. a. das Fälligkeitsdatum (`DueAt`) einer Rechnung abgeleitet wird (siehe StRS-007). |
|
||||
| **Kontingent** | Begrenztes Leistungsvolumen (z. B. Stunden, Klicks) eines Vertrags; der „Kontingentrest" wird laufend aus Verbrauch berechnet (siehe SwRS-096). |
|
||||
| **Fakturierung** | Prozess der Rechnungserstellung, insbesondere die automatisierte, stichtagsbezogene Massenabrechnung von Vertragskunden (`AutomaticFacturaBL`, siehe StRS-006). |
|
||||
| **Helpdesk / Ticket** | Zentrales Objekt der Supportabwicklung (`HelpdeskBL` u. v. a.); durchläuft Status, Priorität, Zeiterfassung, Eskalation bis zum Abschluss (siehe StRS-019). |
|
||||
| **TimerBilling** | Zeitbasierte Abrechnung von Serviceleistungen anhand erfasster Arbeitszeit. |
|
||||
| **Handelspool (TradePool)** | Mechanismus zum Austausch/Import von Artikeln zwischen Standorten bzw. mit Handelspartnern. |
|
||||
| **EDI** | Electronic Data Interchange - automatisierter, strukturierter Datenaustausch mit Distributoren (z. B. ALSO, Alltron, Komsa, EGIS) über lieferantenspezifische Formate, gebündelt über einen zentralen Dispatcher. |
|
||||
| **OpenTrans** | Ein von mehreren EDI-Partnern verwendetes XML-Format für Bestellungen/Angebote (siehe SwRS-094). |
|
||||
| **RiverSuite / RiverDivo** | Externes Partnersystem für Vertragsverwaltung, dessen Tickets/Zugriffsschlüssel vor Anlage eines Helpdesk-Vorgangs validiert werden (siehe SyRS-012). |
|
||||
| **DSGVO-Löschrecht** | Im Code wörtlich so benannte Funktion (`DsgvoDeleteRight...`) zur gezielten Löschung personenbezogener Kontaktdaten auf Anfrage (siehe StRS-004). |
|
||||
| **RMA** | Return Merchandise Authorization - Retourenvorgang für Kundenartikel inkl. Artikelhistorie (siehe StRS-011). |
|
||||
| **Mandant / Filiale (Branch)** | Mehrmandantenfähigkeit: `MandatorBL` verwaltet Mandanten, `BranchBL` Filialen mit eigenen Nummernkreisen und Erlös-/Aufwandskonten (siehe SwRS-023). |
|
||||
| **PRIMÄR / SEKUNDÄR / KONTEXT** | Belegklassifikation dieses Berichts (nicht Teil der Fachdomäne, sondern der Analysemethodik): PRIMÄR = durchgesetzte Regel im Code/DB-Constraint, SEKUNDÄR = UI-Label/Fehlermeldung/Reportlayout/Konfigurationsschalter, KONTEXT = Kommentar/Commit-Message/Ticketreferenz/Ordnerstruktur. |
|
||||
| **Herkunft** | Attribut eines Reports zur Unterscheidung von Standard- vs. kundenspezifisch angepassten Reports (siehe SwRS-082). |
|
||||
| **Systemartikel** | Technische Pseudo-Artikel (z. B. Fracht, Rabatt, Kontingent-Saldo), die reale, nicht-warenbezogene Geschäftsvorgänge im Artikelmodell abbilden, um die bestehende Beleglogik wiederzuverwenden (siehe StRS-020). |
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
# Hypothesen - c-entron ERP
|
||||
|
||||
Sammlung aller Anforderungen mit `Status: HYPOTHESE`. Diese Liste ist **deckungsgleich** mit den
|
||||
Inline-`[HYPOTHESE]`/`Status: HYPOTHESE`-Markierungen in `StRS.md`, `SyRS.md` und `SwRS.md` (siehe
|
||||
Konsistenzcheck in `Analysebericht.md`). Sie enthält ausschließlich Anforderungen, keine freien,
|
||||
anforderungslosen Fragen - offene Punkte ohne Anforderungsbezug stehen in der Selbstbewertung im
|
||||
Analysebericht.
|
||||
|
||||
Insgesamt **31 von 156 Anforderungen (19,9 %)** sind als Hypothese geführt.
|
||||
|
||||
## Sicherheitsrelevant (risikobasierte Priorisierung, siehe Analysebericht-Konsistenzcheck)
|
||||
|
||||
| ID | Titel | Offene Frage |
|
||||
|---|---|---|
|
||||
| StRS-005 | Sichere Hinterlegung von Zugangsdaten zu Kundenanlagen | Erfolgt Verschlüsselung an einer nicht gefundenen Stelle (Interceptor/Setter)? Fehlende Krypto-Aufrufe im zentralen Code sind starkes Indiz für eine echte Lücke. |
|
||||
| SyRS-006 | Verschlüsselte Ablage sensibler Zugangsdaten | Siehe StRS-005 - ohne DB-Zugriff nicht abschließend klärbar. |
|
||||
| SwRS-055 | Rechteprüfung bei Dokumentationsabruf mit Umgehungsoption | Wo genau wird `checkRight: false` aufgerufen? Alle Aufrufstellen sind in Folge-Iteration zu identifizieren. |
|
||||
| SwRS-066 | Domänen-Blacklist für ausgehende E-Mails | Wird `IsBlacklisted` vor jedem tatsächlichen Mailversand aufgerufen, oder existieren Versandpfade, die die Prüfung umgehen? |
|
||||
| SwRS-041 | Skript-Engine für administrative Zusatzfunktionen | Codeausführung über Skript-Engine ist sicherheitsrelevant - welche Berechtigung ist zur Ausführung nötig? Nicht verifiziert. |
|
||||
| SwRS-038 | Portal-Zugriffsberechtigung für Report-Webservice | Konkrete Prüfbedingung der Zugriffskontrollklasse nicht verifiziert. |
|
||||
|
||||
## Übrige Hypothesen
|
||||
|
||||
| ID | Titel | Offene Frage |
|
||||
|---|---|---|
|
||||
| SwRS-032 | DSGVO-bezogene Dokumentenverwaltung | Nur Ordnername `Dsgvo` geprüft - konkrete Speicherorte/Löschfristen offen. |
|
||||
| SwRS-036 | Systeminterne Performance-Tests | Konkrete Testmetrik nicht verifiziert. |
|
||||
| SwRS-039 | Laufzeit-Profiling zur Performance-Analyse | Nur Dateiname geprüft. |
|
||||
| SwRS-040 | SQL-Verwaltungswerkzeuge für Lizenzserver-Datenbankinformationen | Konkrete Feldinhalte nicht verifiziert. |
|
||||
| SwRS-042 | Serialisierbare Webservice-Konfiguration | Nur Dateiname geprüft. |
|
||||
| SwRS-044 | Freischaltung von Anwendungsversionen/Modulen | Konkrete Durchsetzung der Freischaltung nicht verifiziert. |
|
||||
| SwRS-045 | Pflichtfeld- und Textformatierungsregeln | Aufrufstellen von `MandatoryBL` (Durchsetzung) nicht verifiziert. |
|
||||
| SwRS-049 | Getrennter Buchhaltungsexport und -import | Konkretes Zielformat/-system nicht verifiziert. |
|
||||
| SwRS-058 | Erwartete Ereignisse mit Protokolleinträgen | Ob Ausbleiben eines Ereignisses tatsächlich alarmiert, im Code nicht nachgewiesen. |
|
||||
| SwRS-073 | Automatische Bereinigung abgelaufener Systembenachrichtigungen | Kriterium für „abgelaufen" und automatischer vs. manueller Aufruf nicht verifiziert. |
|
||||
| SwRS-076 | Technische Hilfsfunktionen für Bild-, PDF- und Word-Verarbeitung | Nur Dateinamen geprüft, keine Methodensignaturen verifiziert. |
|
||||
| SwRS-097 | Gutschriften mit explizitem Abschlusszustand | Schreibschutz nach Abschluss nicht im Code verifiziert. |
|
||||
| SwRS-100 | Telemarketing-Aktionen mit wiederverwendbaren Vorlagen und Texten | Nur Klassenstruktur geprüft, keine Methodendetails. |
|
||||
| SwRS-102 | Zentraler Systemtabellen-Zugriff (I3D-Kernel) | Zentrale Vergabestelle nur oberflächlich geprüft (eine Methode ohne Implementierungsdetails). |
|
||||
| SwRS-104 | Ticket-Projekte mit Aufgabenabhängigkeiten | Ob offene Abhängigkeit den Abschluss der Folgeaufgabe blockiert, nicht verifiziert. |
|
||||
| SwRS-106 | Formatumwandlung von Text für Werkzeug-Ausgaben | Konkret unterstützte `TextFormat`-Werte nicht verifiziert. |
|
||||
| SwRS-112 | Lokalisierte Systemtexte und FTP-Basis-URLs als Ressourcen | Ladelogik nicht verifiziert; Umfang unterstützter Sprachen über Deutsch/Englisch hinaus offen. |
|
||||
| SwRS-113 | Startvorgang ohne aktive Fachlogik | Modul `Start` besitzt nur auskommentierten Code - keine wirksame Anforderung ableitbar. |
|
||||
| SyRS-014 | WPF-Desktopclient als primärer Rich-Client | Nur Projektstruktur geprüft, keine einzelne UI-Komponente im Detail verifiziert. |
|
||||
| SwRS-115 | Entitätsmodell mit einheitlicher Basisklasse für persistierte Objekte | Konkretes Gleichheitsverhalten der Basisklassen nicht verifiziert. |
|
||||
| SwRS-116 | Zentrales Gateway für EDI-Import/-Export und Zahlungsverkehr | Zusammenspiel zwischen `Centron.BL/EDI` und `Centron.Gateway` (Verantwortungsgrenze) nicht im Detail verifiziert. |
|
||||
| SwRS-118 | Gemeinsame UI-Steuerelemente-Bibliothek | Nur Projektstruktur geprüft, keine einzelnen Steuerelemente verifiziert. |
|
||||
| SwRS-119 | Getrennte Hosting-Varianten des Webservice (Konsole/Windows-Dienst) | Nur Projektstruktur geprüft. |
|
||||
| SwRS-120 | Technische Querschnittsbibliothek `Centron.Common` | Nur indirekte Verwendung über Imports belegt, keine eigenen Klassen direkt gelesen. |
|
||||
| SwRS-121 | Schichtübergreifende Vertragsschnittstellen (`Centron.Interfaces`) | Nur indirekte Verwendung über Imports belegt, keine eigenen Interface-Definitionen direkt gelesen. |
|
||||
|
||||
**Zählkontrolle:** 6 (sicherheitsrelevant) + 25 (übrige) = 31 Einträge, deckungsgleich mit der
|
||||
oben genannten Gesamtzahl und mit allen `Status: HYPOTHESE`-Vorkommen in `StRS.md`/`SyRS.md`/`SwRS.md`.
|
||||
+197
@@ -0,0 +1,197 @@
|
||||
# Stakeholder Requirements Specification (StRS) - c-entron ERP
|
||||
|
||||
Fachliche Sicht: Akteure, Geschäftsziele. Reverse Requirements Engineering aus der Codebasis
|
||||
`CentronERP` (Windows-Desktopclient, Blazor-Webportal "Nexus", REST-API, MSSQL via NHibernate).
|
||||
Format je Anforderung siehe Vorgabe im Analyseauftrag. IDs sind fortlaufend über alle Module.
|
||||
|
||||
---
|
||||
|
||||
## Cluster: Sicherheit - Berechtigungen, Authentifizierung, Datenschutz (Module #3, #4, #5, #75, #114)
|
||||
|
||||
```
|
||||
ID: StRS-001
|
||||
Titel: Rollen-/rechtebasierte Zugriffssteuerung
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Administrator, alle Systembenutzer
|
||||
Vorbedingung: Ein Benutzer ist im System angelegt und einer oder mehreren Benutzergruppen zugeordnet.
|
||||
Fakt: `AppRightsBL` verwaltet `AppRight`, `AppGroup` und `AppGroupRightAssignment`; Rechte werden Benutzergruppen zugewiesen, nicht einzelnen Benutzern direkt (`GetRightsFromCurrentUser` iteriert `user.Groups`).
|
||||
Aussage: Das System soll den Zugriff auf geschützte Funktionen ausschließlich über Rechte steuern, die einer Benutzergruppe zugeordnet sind, der ein Benutzer angehört.
|
||||
Ergebnis: Ein Benutzer kann nur Funktionen ausführen, für die mindestens eine seiner Gruppen das erforderliche Recht besitzt.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/Rights/AppRightsBL.cs, Methode `GetRightsFromCurrentUser(AppUser)` - iteriert `user.Groups`, sammelt `group.Rights` - Begründung: zeigt die gruppenbasierte Rechtezuordnung als durchgesetztes Datenmodell.
|
||||
- [SEKUNDÄR] Centron.BL/Administration/Rights/AppUserGroupBL.cs - Begründung: verwaltet die Gruppenzuordnung, auf der die Rechteprüfung aufbaut.
|
||||
Prüfidee: Benutzer A ist nur Gruppe X zugeordnet, X besitzt Recht R nicht -> Aufruf einer mit R geschützten Aktion muss verweigert werden.
|
||||
Tracelinks: SyRS-001
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Gruppenbasierte Rechtevergabe ist Standardmuster für Multi-User-ERP und bleibt fachlich erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-002
|
||||
Titel: Verpflichtende Anmeldung vor Systemzugriff
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Alle Systembenutzer (Desktopclient, Webportal, API-Client)
|
||||
Vorbedingung: Ein Client versucht, auf eine geschützte Ressource zuzugreifen.
|
||||
Fakt: `AuthenticationTicketBL.GetAuthTicketInfo` prüft nacheinander ein `ConnectionTicket` und einen `AccessToken`; ohne gültigen Nachweis wird `AuthTicketInfo(null, null)` zurückgegeben.
|
||||
Aussage: Das System soll jeden Zugriff auf geschützte Ressourcen an einen gültigen Anmeldenachweis (Sitzungsticket oder Access-Token) binden.
|
||||
Ergebnis: Ohne gültiges Ticket oder Access-Token wird kein Benutzerkontext ermittelt; nachgelagerte Rechteprüfungen schlagen fehl.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/Logins/AuthenticationTicketBL.cs, Methode `GetAuthTicketInfo` - Begründung: zeigt die tatsächliche Prüfkette (Ticket -> AccessToken -> EntraID-Employee-Mapping) und den Fehlschlag-Rückgabewert.
|
||||
- [SEKUNDÄR] Centron.BL/Administration/Logins/EntraIDUsersBL.cs - Begründung: belegt zusätzlichen Authentifizierungsweg über Microsoft Entra ID.
|
||||
Prüfidee: Aufruf ohne Ticket/Token liefert `AuthTicketInfo` mit `AppUserI3D == null`; nachgelagerte API-Aufrufe müssen 401 liefern (siehe SyRS-002).
|
||||
Tracelinks: SyRS-002
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Authentifizierung ist Grundvoraussetzung jeder Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-003
|
||||
Titel: Zusätzlicher Schutz sensibler Konten durch Zwei-Faktor-Authentifizierung
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Systembenutzer mit aktivierter 2FA, Administrator
|
||||
Vorbedingung: Für den Benutzer ist ein Zwei-Faktor-Schlüssel hinterlegt.
|
||||
Fakt: `TwoFactorAuthenticationBL` bietet `AppUserTwoFactorAuthKeyExists`, `UpdateAppUserTwoFactorAuthKey` und `ValidateAuthenticationPin`.
|
||||
Aussage: Das System soll optional eine zweite Authentifizierungsstufe (PIN gegen hinterlegten Schlüssel) verlangen, bevor der Zugriff gewährt wird.
|
||||
Ergebnis: Bei aktivierter 2FA ist der Zugriff erst nach erfolgreicher PIN-Validierung möglich.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs, Methode `ValidateAuthenticationPin(LoggedInUser, string)` - Begründung: einzige Stelle, die die eingegebene PIN gegen den hinterlegten Schlüssel prüft.
|
||||
Prüfidee: Für einen Benutzer mit hinterlegtem 2FA-Schlüssel liefert `ValidateAuthenticationPin` mit falscher PIN ein Fehlerergebnis.
|
||||
Tracelinks: SyRS-003
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - 2FA ist Stand der Technik und sollte im Zielsystem ausgebaut werden.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-004
|
||||
Titel: Recht auf Löschung personenbezogener Daten (DSGVO)
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Datenschutzbeauftragter, Administrator
|
||||
Vorbedingung: Eine betroffene Person (Kontakt) hat die Löschung ihrer Daten verlangt.
|
||||
Fakt: `DataSecurityBL` bietet `DsgvoDeleteRightGetContacts(currentUser, filter)` zum Auffinden betroffener Kontakte und `DsgvoDeleteRightDeleteContacts(currentUser, contacts)` zur Löschung.
|
||||
Aussage: Das System soll dem Datenschutzbeauftragten ermöglichen, personenbezogene Kontaktdaten gezielt aufzufinden und auf Anfrage zu löschen.
|
||||
Ergebnis: Nach Ausführung sind die ausgewählten Kontakte gemäß der Lösch-Routine aus dem System entfernt bzw. anonymisiert.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/DataSecurity/DataSecurityBL.cs, Methoden `DsgvoDeleteRightGetContacts` (Zeile 377) und `DsgvoDeleteRightDeleteContacts` (Zeile 787) - Begründung: benennen namentlich den DSGVO-Löschanspruch und implementieren ihn als durchsetzbare Operation.
|
||||
- [SEKUNDÄR] Centron.BL/Administration/DataSecurity/DataSecurityBL.cs, Methode `DataSecurityExecuteCleanUp` - Begründung: ergänzende allgemeine Datenbereinigungsfunktion im selben Modul.
|
||||
Prüfidee: Suche nach einem bekannten Kontakt liefert ihn in `DsgvoDeleteRightGetContacts`; anschließende Löschung entfernt ihn aus dem Ergebnis einer erneuten Suche.
|
||||
Tracelinks: SyRS-004
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - gesetzliche Pflicht (DSGVO Art. 17), im Zielsystem zwingend erforderlich.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-005
|
||||
Titel: Sichere Hinterlegung von Zugangsdaten zu Kundenanlagen
|
||||
Ebene: StRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Techniker, Support-Mitarbeiter
|
||||
Vorbedingung: Für ein Kunden-Asset sollen Zugangsdaten (z. B. Router-Login) hinterlegt werden.
|
||||
Fakt: `PasswordManagementBL.AddNewPassword`/`ChangePassword` legen Datensätze in `PasswordManagement`/`PasswordManagementKeyword` an und protokollieren jeden Zugriff über `PasswordManagementAccessLogBL`. In `PasswordManagementKeywordBL.AddNewKeyword` wird das Feld `Password` jedoch fest auf einen Leerstring gesetzt (`keyword.Password = "";`), der übergebene Klartext-Parameter `password` wird nicht zugewiesen; in `GetDecryptedKeywordById` steht nur der Kommentar `// decryption`, ohne dass eine Entschlüsselungsfunktion aufgerufen wird; im Ordner `Centron.DAO/UserTypes` existiert keine Verschlüsselungs-UserType-Klasse für dieses Feld.
|
||||
Aussage: Das System soll für Kundenanlagen hinterlegte Zugangsdaten (Benutzername/Passwort) vertraulich speichern, den Zugriff protokollieren und nur berechtigten Mitarbeitenden im Klartext anzeigen.
|
||||
Ergebnis: Zugangsdaten sind bei Ablage nicht im Klartext einsehbar (Verschlüsselung); jeder lesende Zugriff wird mit Benutzer und Zeitpunkt protokolliert.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/PasswordManagementArea/PasswordManagementAccessLogBL.cs, Methode `SavePasswordManagementAccessLog` - Begründung: belegt, dass die Protokollierungspflicht tatsächlich durchgesetzt wird (wird bei jedem Anlegen/Lesen aufgerufen).
|
||||
- [KONTEXT] Centron.BL/PasswordManagementArea/PasswordManagementKeywordBL.cs, Zeilen 21-58 - Begründung: Feld `Salt` und Kommentar `// decryption` deuten auf ursprünglich vorgesehene Verschlüsselung hin, die im vorliegenden Codestand nicht implementiert bzw. nicht wirksam ist.
|
||||
Prüfidee: Neuanlage eines Passworteintrags über `AddNewPassword`/`ChangePassword`, anschließende Prüfung des gespeicherten `Password`-Feldwerts in der DB auf Klartext oder Leerstring.
|
||||
Tracelinks: SyRS-005, SyRS-006
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Workaround - die Protokollierung ist eine tragfähige Kontrollfunktion; die Verschlüsselungslücke ist im Zielsystem zwingend zu schließen, nicht zu übernehmen.
|
||||
Status: HYPOTHESE - Begründung: Es ist anhand des statisch gelesenen Quellcodes nicht auszuschließen, dass Verschlüsselung/Entschlüsselung an einer nicht gefundenen Stelle (z. B. NHibernate-Interceptor, Datenbank-Trigger, Property-Setter außerhalb der gelesenen Dateien) erfolgt; das Fehlen jeglicher Krypto-Aufrufe in den zentralen BL-Methoden ist jedoch ein starkes Indiz für eine Sicherheitslücke oder unvollständige Funktion, das in einer Folge-Iteration mit gezielter Suche nach Property-Settern/Interceptoren zu klären ist.
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-006
|
||||
Titel: Automatisierte, periodische Fakturierung von Vertragskunden
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung/Fakturierung
|
||||
Vorbedingung: Kunden mit laufenden Verträgen haben abrechenbare Lieferscheine/Aufträge bis zu einem Stichtag.
|
||||
Fakt: `AutomaticFacturaBL.SearchBillingDeliveryLists(DateTime endDate, int customerI3D)` und `SearchBillingOrders(DateTime endDate, int customerI3D, bool searchForInvoice)` ermitteln abrechenbare Belege bis zu einem Stichtag je Kunde; `SearchCustomers(DateTime BilledTo)` ermittelt die für einen Abrechnungslauf relevanten Kunden.
|
||||
Aussage: Das System soll es der Buchhaltung ermöglichen, für einen wählbaren Stichtag alle abrechenbaren Lieferscheine, Aufträge und Kunden zu ermitteln und automatisiert zu fakturieren.
|
||||
Ergebnis: Es liegt eine vollständige, stichtagsbezogene Liste abrechenbarer Vorgänge je Kunde vor, aus der Rechnungen erzeugt werden können.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs, Zeilen 102-127, 451 - Begründung: implementieren die stichtagsbezogene Ermittlung abrechenbarer Belege als Kernfunktion der automatischen Fakturierung.
|
||||
Prüfidee: Aufruf von `SearchBillingOrders` mit einem Stichtag, der genau einen offenen Auftrag einschließt, liefert exakt diesen Auftrag zurück.
|
||||
Tracelinks: SyRS-007
|
||||
Konsolidierung: Kandidat: gemeinsame fachliche Funktion mit Sales-Receipts-Fakturierung (siehe SwRS-008-Notiz) - im Zielsystem ist zu klären, ob ein einziger Fakturierungspfad statt zweier getrennter Belegwelten (`Sales/Receipts` klassisch vs. `Sales/CustomerAssets`) sinnvoll ist.
|
||||
Übernahmewürdigkeit: übernehmen - automatisierte Vertragsabrechnung ist Kernnutzen eines ERP-Systems.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-007
|
||||
Titel: Fälligkeitsdatum von Rechnungen aus Zahlungskondition
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Buchhaltung, Kunde
|
||||
Vorbedingung: Eine Rechnung wird für einen Kunden mit hinterlegter Zahlungskondition erstellt.
|
||||
Fakt: `InvoiceBL.UpdateDueDate` setzt `invoice.DueAt` anhand von `AssetConditionBL.GetDueDate(invoice.AssetCondition)`, sofern eine `AssetCondition` vorhanden ist, sonst `null`.
|
||||
Aussage: Das System soll das Fälligkeitsdatum einer Rechnung automatisch aus der hinterlegten Zahlungskondition des Kunden ableiten.
|
||||
Ergebnis: Jede gespeicherte Rechnung mit hinterlegter Zahlungskondition trägt ein korrekt berechnetes Fälligkeitsdatum.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs, Methode `UpdateDueDate` (Zeile 115) und deren Aufruf in `DoBeforeStore` (Zeile 132-135) - Begründung: zeigt die zwingende Ausführung vor jedem Speichern einer Rechnung.
|
||||
Prüfidee: Rechnung mit Zahlungskondition „14 Tage netto" gespeichert -> `DueAt` = Rechnungsdatum + 14 Tage.
|
||||
Tracelinks: SyRS-008
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Standardregel der Fakturierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: StRS-008
|
||||
Titel: Automatische Kassenbuchbuchung bei Barverkauf
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Kasse/Verkaufspersonal, Buchhaltung
|
||||
Vorbedingung: Eine Rechnung wird als Barverkauf (Kassenrechnung) mit sofortiger Zahlung erfasst.
|
||||
Fakt: `InvoiceBL.DoAfterStoreTrans` prüft `asset.IsCashAsset` und ruft bei ungleich null gezahltem Betrag (`PaidRecently`) `CashBookBookingBL.UpdateCashBookBookingFromAsset` auf.
|
||||
Aussage: Das System soll bei einer als Barverkauf gekennzeichneten Rechnung automatisch eine passende Kassenbuchbuchung erzeugen oder aktualisieren.
|
||||
Ergebnis: Nach dem Speichern einer Kassenrechnung mit Zahlbetrag existiert eine korrespondierende Kassenbuchbuchung.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs, Zeilen 161-168 (`DoAfterStoreTrans`) - Begründung: zeigt die transaktionale, automatische Verknüpfung von Rechnung und Kassenbuch als durchgesetzte Regel.
|
||||
Prüfidee: Barverkaufsrechnung mit `PaidRecently = 50,00 EUR` speichern -> Kassenbuch weist eine Buchung über 50,00 EUR zu dieser Rechnung aus.
|
||||
Tracelinks: SyRS-009
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Kassenintegration ist geschäftskritisch für Bar-Zahlungsprozesse.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Mindestabdeckung je Fachmodul (Schritt 0b)
|
||||
|
||||
```
|
||||
ID: StRS-009
|
||||
Titel: Terminanfragen über das Kundenportal
|
||||
Ebene: StRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Kunde (Webportal), Innendienst
|
||||
Vorbedingung: Ein Kunde möchte über das Portal einen Termin anfragen oder auf einen Terminvorschlag antworten.
|
||||
Fakt: `AppointmentRequestBL` bietet `HandleAppointmentRequestReply(AppointmentRequestReply)`, `GetAppointmentRequests`/`GetAppointmentProposals` sowie `SaveOrUpdateAppointmentRequest`/`SaveOrUpdateAppointmentProposal`.
|
||||
Aussage: Das System soll Kunden ermöglichen, Terminanfragen zu stellen und auf Terminvorschläge zu antworten, ohne dass ein Mitarbeiter den Termin manuell im Kalender pflegen muss.
|
||||
Ergebnis: Eine Kundenantwort auf einen Terminvorschlag wird als `AppointmentRequestReply` verarbeitet und im System nachvollziehbar abgelegt.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/AppointmentRequests/AppointmentRequestBL.cs, Zeilen 29, 116-139 - Begründung: benennt die durchsetzenden Methoden des Anfrage-/Antwort-Workflows.
|
||||
Prüfidee: Terminvorschlag anlegen, Kundenantwort simulieren, Status der `AppointmentRequest` prüft sich auf „beantwortet".
|
||||
Tracelinks: SwRS-011
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - Self-Service-Terminierung ist ein für Web/SaaS besonders relevantes Feature.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
*(Fortsetzung mit Mindestabdeckung je Fachmodul ab StRS-010 im nächsten Abschnitt.)*
|
||||
+2847
File diff suppressed because it is too large
Load Diff
+212
@@ -0,0 +1,212 @@
|
||||
# System Requirements Specification (SyRS) - c-entron ERP
|
||||
|
||||
Systemverhalten, Schnittstellen, Performance- und Sicherheitsanforderungen.
|
||||
|
||||
---
|
||||
|
||||
## Cluster: Sicherheit - Berechtigungen, Authentifizierung, Datenschutz
|
||||
|
||||
```
|
||||
ID: SyRS-001
|
||||
Titel: Serverseitige Rechteprüfung vor jeder geschützten Operation
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (BL-Schicht)
|
||||
Vorbedingung: Ein authentifizierter Benutzer ruft eine rechtebeschränkte Operation auf.
|
||||
Fakt: `AppRightsBL.HasUserRight(int appUserI3D, int rightID)` prüft, ob die Rechte-ID in der (gecachten) Liste `GetAllAppRightsFromUser` enthalten ist; diese Liste wird aus den Tabellen `Sichtrus`/`Sichmemb` per Rohsql ermittelt. `UserRightsExt.HasUserRight` kapselt den Aufruf und liefert im Fehlerfall (Exception) `false` (fail-closed).
|
||||
Aussage: Das System soll vor Ausführung jeder rechtebeschränkten Operation serverseitig prüfen, ob der aktuelle Benutzer über die erforderliche Rechte-ID verfügt, und im Zweifelsfall (Fehler bei der Prüfung) den Zugriff verweigern.
|
||||
Ergebnis: Eine Operation ohne ausreichendes Recht wird nicht ausgeführt; bei technischem Fehler in der Prüfung gilt „kein Zugriff" als Standardverhalten.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/Rights/AppRightsBL.cs, Zeilen 644-649 (`HasUserRight`) und 651-659 (`GetAllAppRightsFromUser`, SQL gegen `Sichtrus`/`Sichmemb`) - Begründung: benennt die durchsetzende Stelle und die zugrundeliegenden DB-Tabellen der Rechteprüfung.
|
||||
- [PRIMÄR] Centron.BL/Administration/Rights/UserRightsExt.cs, Zeilen 18-32 (`HasUserRight`-Extension) - Begründung: zeigt das Fail-Closed-Verhalten (catch -> return false) als durchgesetzte Sicherheitsregel.
|
||||
Prüfidee: Rechteprüfung für einen Benutzer ohne das angefragte Recht liefert `false`; Simulation eines Sitzungsfehlers während der Prüfung liefert ebenfalls `false`, nicht `true`.
|
||||
Tracelinks: StRS-001
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - fail-closed-Verhalten ist sicherheitsrelevant und im Zielsystem zu erhalten.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-002
|
||||
Titel: Ermittlung des Benutzerkontexts aus Anmeldenachweis
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Authentifizierungsschicht)
|
||||
Vorbedingung: Ein Client sendet einen Request mit Ticket- oder Token-Angabe.
|
||||
Fakt: `AuthenticationTicketBL.GetAuthTicketInfo(authTicket, ipAddress, apiMethod)` prüft zuerst `TicketBL.GetTicket`, danach `AccessTokenBL.ValidateToken(authTicket, ipAddress, apiMethod)` inkl. IP- und API-Methoden-Kontext; bei Erfolg wird über `AppUserBL.GetAppUserI3DForEmployee` der zugehörige `AppUser` ermittelt.
|
||||
Aussage: Das System soll aus einem übergebenen Anmeldenachweis (Sitzungsticket oder Access-Token) eindeutig einen Benutzerkontext ableiten oder, falls dies nicht möglich ist, einen leeren Kontext liefern.
|
||||
Ergebnis: Jeder weiteren Verarbeitung liegt entweder ein eindeutig ermittelter `AppUserI3D` oder ein expliziter „nicht angemeldet"-Zustand zugrunde.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/Logins/AuthenticationTicketBL.cs, Zeilen 25-48 - Begründung: vollständige Prüfkette mit Rückgabewerten.
|
||||
Prüfidee: Aufruf mit ungültigem Ticket und ungültigem Token liefert `AuthTicketInfo(null, null)`.
|
||||
Tracelinks: StRS-002
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-003
|
||||
Titel: REST-API erzwingt Authentifizierung und Autorisierung je Endpunkt
|
||||
Ebene: SyRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: API-Client (Webportal, mobile Anwendung, externe Integration)
|
||||
Vorbedingung: Ein HTTP-Request trifft auf einen mit `[AuthorizeUserRight]` versehenen Controller-Endpunkt.
|
||||
Fakt: `UserRightAuthorizationFilter.OnAuthorization` liefert `UnauthorizedResult` (401), wenn kein Benutzer ermittelt werden kann, und `ForbidResult` (403), wenn der ermittelte Benutzer das per Attribut geforderte Recht nicht besitzt (`!currentUser.HasUserRight(_requiredRightId.Value)`).
|
||||
Aussage: Das System soll bei jedem REST-API-Aufruf auf einen geschützten Endpunkt sowohl die Authentifizierung als auch das konkret erforderliche Benutzerrecht serverseitig prüfen und bei Nichterfüllung mit dem jeweils passenden HTTP-Statuscode antworten.
|
||||
Ergebnis: Nicht authentifizierte Requests erhalten 401, authentifizierte Requests ohne ausreichendes Recht erhalten 403; nur berechtigte Requests erreichen die Controller-Logik.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.Controllers/Authorization/AuthorizeUserRightAttribute.cs, Zeilen 29-56 - Begründung: benennt Klasse, Methode und die konkrete Bedingung (`HasUserRight`) der durchsetzenden Stelle.
|
||||
Prüfidee: Request ohne Anmeldenachweis an geschützten Endpunkt -> HTTP 401; Request mit Anmeldenachweis, aber fehlendem Recht -> HTTP 403.
|
||||
Tracelinks: StRS-001, StRS-002
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen - deklaratives Autorisierungsmuster ist gute Grundlage für Neuimplementierung.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-004
|
||||
Titel: Zweistufige Authentifizierung vor Zugriffsfreigabe
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Login-Ablauf)
|
||||
Vorbedingung: Für den angemeldeten Benutzer ist ein 2FA-Schlüssel hinterlegt (`AppUserTwoFactorAuthKeyExists` liefert true).
|
||||
Fakt: `TwoFactorAuthenticationBL.ValidateAuthenticationPin(LoggedInUser, string authenticationPin)` validiert die eingegebene PIN gegen den hinterlegten Schlüssel und liefert ein `Result`.
|
||||
Aussage: Das System soll den Login-Vorgang für Benutzer mit hinterlegtem 2FA-Schlüssel erst nach erfolgreicher PIN-Validierung abschließen.
|
||||
Ergebnis: Ein Login mit korrektem Passwort, aber falscher oder fehlender 2FA-PIN, wird nicht abgeschlossen.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/TwoFactorAuthenticator/TwoFactorAuthenticationBL.cs, Zeile 43 (`ValidateAuthenticationPin`) - Begründung: einzige Prüfstelle für die zweite Faktor-Stufe.
|
||||
Prüfidee: Login mit hinterlegtem 2FA-Schlüssel und falscher PIN -> Ergebnisstatus Fehler, kein Sitzungsaufbau.
|
||||
Tracelinks: StRS-003
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-005
|
||||
Titel: Auffinden und Löschen personenbezogener Kontaktdaten auf Anfrage
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Datenschutzfunktion)
|
||||
Vorbedingung: Ein Datenschutzbeauftragter ruft die DSGVO-Löschfunktion mit einem Filter auf.
|
||||
Fakt: `DataSecurityBL.DsgvoDeleteRightGetContacts(AppUser, DsgvoDeleteRightContactFilter)` liefert `IList<DataSecurityContactInfoDTO>`; `DsgvoDeleteRightDeleteContacts(AppUser, IList<DataSecurityContactInfoDTO>)` führt die Löschung aus und liefert einen Ergebnisstring.
|
||||
Aussage: Das System soll personenbezogene Kontakte anhand eines Filters auffindbar machen und auf explizite Bestätigung hin löschen.
|
||||
Ergebnis: Die übergebenen Kontakte sind nach Ausführung nicht mehr über die reguläre Kontaktsuche auffindbar.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Administration/DataSecurity/DataSecurityBL.cs, Zeilen 377 und 787 - Begründung: benennt die konkret durchsetzenden Methoden.
|
||||
Prüfidee: Testkontakt anlegen, über Filter finden, löschen, erneute Suche liefert kein Ergebnis mehr.
|
||||
Tracelinks: StRS-004
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-006
|
||||
Titel: Verschlüsselte Ablage sensibler Zugangsdaten
|
||||
Ebene: SyRS
|
||||
Typ: Sicherheit
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Passwort-Tresor)
|
||||
Vorbedingung: Ein Mitarbeiter legt Zugangsdaten zu einem Kunden-Asset an.
|
||||
Fakt: Das Entitätsfeld `PasswordManagementKeyword.Password` wird in `AddNewKeyword` mit Leerstring belegt statt mit dem übergebenen Klartext-Parameter; `GetDecryptedKeywordById` gibt `keyword.Password` ohne erkennbaren Entschlüsselungsaufruf zurück; kein `UserType` in `Centron.DAO/UserTypes` deutet auf spaltenseitige Verschlüsselung hin.
|
||||
Aussage: Das System soll hinterlegte Zugangsdaten in der Datenbank ausschließlich verschlüsselt speichern.
|
||||
Ergebnis: Ein direkter Blick in die Datenbanktabelle zeigt keinen lesbaren Klartext des Passworts.
|
||||
Belege:
|
||||
- [KONTEXT] Centron.BL/PasswordManagementArea/PasswordManagementKeywordBL.cs, Zeilen 38-58 - Begründung: zeigt, dass der Passwortwert im gelesenen Code nicht mit erkennbarer Verschlüsselung verarbeitet wird; als KONTEXT eingestuft, da eine Verschlüsselung außerhalb des gelesenen Codes nicht ausgeschlossen werden kann.
|
||||
Prüfidee: Neuanlage eines Eintrags, anschließende Prüfung des `Password`-Spaltenwerts in der Datenbank auf Klartext.
|
||||
Tracelinks: StRS-005
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Workaround
|
||||
Status: HYPOTHESE - Begründung: siehe StRS-005; ohne DB-Zugriff oder vollständige Codeabdeckung (Interceptoren, Setter) nicht abschließend zu klären, es liegt für eine risikorelevante Aussage kein PRIMÄR-Beleg vor, daher zwingend als Hypothese geführt.
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-007
|
||||
Titel: Stichtagsbezogene Ermittlung abrechenbarer Vorgänge
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Fakturierungslauf)
|
||||
Vorbedingung: Ein Abrechnungslauf wird für einen Stichtag gestartet.
|
||||
Fakt: `AutomaticFacturaBL.SearchBillingDeliveryLists(DateTime endDate, int customerI3D)` und `SearchBillingOrders(DateTime endDate, int customerI3D, bool searchForInvoice)` filtern offene Belege nach Stichtag und Kunde.
|
||||
Aussage: Das System soll für einen gegebenen Stichtag und Kunden alle abrechenbaren Lieferscheine und Aufträge deterministisch ermitteln.
|
||||
Ergebnis: Die Ergebnisliste enthält genau die bis zum Stichtag abrechenbaren, noch nicht fakturierten Belege des Kunden.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/AutomaticFactura/AutomaticFacturaBL.cs, Zeilen 102, 114 - Begründung: benennt Methode und Signatur der durchsetzenden Stichtagsfilterung.
|
||||
Prüfidee: Zwei offene Aufträge, einer vor, einer nach dem Stichtag -> nur der erste erscheint im Ergebnis.
|
||||
Tracelinks: StRS-006
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-008
|
||||
Titel: Automatische Berechnung des Rechnungsfälligkeitsdatums
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Belegwesen)
|
||||
Vorbedingung: Eine Rechnung mit hinterlegter Zahlungskondition wird gespeichert.
|
||||
Fakt: `InvoiceBL.DoBeforeStore` ruft vor dem eigentlichen Speichern `UpdateDueDate(asset)` auf, welches `DueAt` aus `AssetConditionBL.GetDueDate` setzt.
|
||||
Aussage: Das System soll das Fälligkeitsdatum jeder Rechnung vor dem Speichern automatisch aus der Zahlungskondition berechnen.
|
||||
Ergebnis: Jede gespeicherte Rechnung trägt ein konsistent berechnetes `DueAt`.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs, Zeilen 115-124, 132-135 - Begründung: benennt Methode, Aufrufstelle und Berechnungsquelle.
|
||||
Prüfidee: Rechnung ohne `AssetCondition` speichern -> `DueAt` bleibt `null` (Abgrenzungsfall).
|
||||
Tracelinks: StRS-007
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
```
|
||||
ID: SyRS-009
|
||||
Titel: Transaktionale Kassenbuchbuchung bei Barverkauf
|
||||
Ebene: SyRS
|
||||
Typ: funktional
|
||||
Qualitätsmerkmal:
|
||||
Akteur: System (Belegwesen/Kasse)
|
||||
Vorbedingung: Eine Rechnung mit `IsCashAsset = true` und `PaidRecently != 0` wird gespeichert.
|
||||
Fakt: `InvoiceBL.DoAfterStoreTrans` ruft innerhalb derselben Transaktion `CashBookBookingBL.UpdateCashBookBookingFromAsset<Invoice, InvoiceItem>(currUser, asset, asset.PaidRecently)` auf und bricht bei Fehlschlag mit dem Fehlerergebnis der Buchung ab.
|
||||
Aussage: Das System soll bei Barverkäufen die Kassenbuchbuchung innerhalb derselben Speichertransaktion wie die Rechnung erzeugen, sodass beide konsistent bleiben.
|
||||
Ergebnis: Es existiert nie eine gespeicherte Barverkaufsrechnung ohne zugehörige Kassenbuchbuchung.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/Sales/CustomerAssets/Invoices/InvoiceBL.cs, Zeilen 155-169 - Begründung: zeigt Transaktionalität (`DoAfterStoreTrans`) und Fehlerausbreitung.
|
||||
Prüfidee: Simulierter Fehler in `UpdateCashBookBookingFromAsset` -> gesamte Speichertransaktion der Rechnung schlägt fehl (kein inkonsistenter Zustand).
|
||||
Tracelinks: StRS-008
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: übernehmen
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
## Mindestabdeckung je Fachmodul (Schritt 0b)
|
||||
|
||||
```
|
||||
ID: SyRS-010
|
||||
Titel: Externe Anbindung an das CPra-Ticket-Portal
|
||||
Ebene: SyRS
|
||||
Typ: Schnittstelle
|
||||
Qualitätsmerkmal:
|
||||
Akteur: Externes System CPra
|
||||
Vorbedingung: Für einen Ticketvorgang soll ein CPra-WebHook-Link erzeugt werden.
|
||||
Fakt: `CPraConnectorBL.ConnectToCPra(username, password)` liefert einen Auth-Token; `GetCPraWebHooks(authToken)` und `GetCPraWebHookLink(webHookId, authToken, customerNumber, customerName, contactPersonEmailAddress, ticketI3D, ticketNumber, ticketTitle, targetEmail)` sind asynchrone HTTP-Aufrufe mit `TaskCanceledException`-Behandlung.
|
||||
Aussage: Das System soll sich gegenüber dem externen CPra-System authentifizieren und ticketbezogene WebHook-Links zum Datenaustausch erzeugen können.
|
||||
Ergebnis: Bei erreichbarem CPra-Dienst liefert das System einen gültigen WebHook-Link zu einem Ticket; bei Zeitüberschreitung wird dies kontrolliert behandelt statt das System abstürzen zu lassen.
|
||||
Belege:
|
||||
- [PRIMÄR] Centron.BL/CPra/CPraConnectorBL.cs, Zeilen 31, 82, 120 sowie Catch-Blöcke bei `TaskCanceledException` (Zeilen 70, 108, 159) - Begründung: benennt die durchsetzenden asynchronen Schnittstellenaufrufe inkl. Timeout-Behandlung.
|
||||
Prüfidee: Simulierter Verbindungsabbruch zu CPra während `GetCPraWebHookLink` -> kontrollierte Fehlerrückgabe statt unbehandelter Exception.
|
||||
Tracelinks: SwRS-012
|
||||
Konsolidierung: nein
|
||||
Übernahmewürdigkeit: Sonderfall - kundenspezifische externe Systemanbindung, im Zielsystem nur bei fortbestehendem Bedarf zu übernehmen.
|
||||
Status: belegt
|
||||
```
|
||||
|
||||
*(Fortsetzung mit Mindestabdeckung je Fachmodul ab SyRS-011 im nächsten Abschnitt.)*
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
# Traceability - c-entron ERP
|
||||
|
||||
Konsolidierte Forward-/Backward-Traceability über alle 156 Anforderungen (StRS-001…020,
|
||||
SyRS-001…015, SwRS-001…121). Grundlage sind die `Tracelinks`-Felder in `StRS.md`, `SyRS.md`
|
||||
und `SwRS.md`.
|
||||
|
||||
**Ehrlichkeit der Traceability:** Bei der Mindestabdeckung (Schritt 0b) wurde bewusst je Modul
|
||||
oft nur **eine** Anforderung auf der fachlich passendsten Ebene erfasst (Breite vor Tiefe, siehe
|
||||
Analyseauftrag). Für diese Anforderungen existiert kein Pendant auf einer anderen Ebene - eine
|
||||
erzwungene Verknüpfung würde eine Vollständigkeit vortäuschen, die nicht besteht. Solche
|
||||
Einträge sind in Abschnitt B als eigenständige Zeilen geführt, nicht als unvollständige
|
||||
Chain-Zeilen in Abschnitt A.
|
||||
|
||||
## Abschnitt A - Vollständige und teilweise Ketten (StRS ↔ SyRS ↔ SwRS)
|
||||
|
||||
| StRS-ID | SyRS-ID | SwRS-ID | Artefaktbeleg (primär) |
|
||||
|---|---|---|---|
|
||||
| StRS-001 | SyRS-001 | SwRS-001, SwRS-002 | AppRightsBL.cs / UserRightsExt.cs |
|
||||
| StRS-001, StRS-002 | SyRS-003 | SwRS-003 | AuthorizeUserRightAttribute.cs |
|
||||
| StRS-001 | - | SwRS-038 (HYPOTHESE) | PortalWebServiceAccessBL.cs |
|
||||
| StRS-001 | - | SwRS-055 (HYPOTHESE) | DocumentationBL.cs (`checkRight`) |
|
||||
| StRS-001 | - | SyRS-013 → SwRS (Warehousing-Artikelrechte, siehe Abschnitt B) | ArticleBL.cs |
|
||||
| StRS-002 | SyRS-002 | SwRS-004 | AuthenticationTicketBL.cs |
|
||||
| StRS-002 | - | SwRS-028 | AccessTokenLogBL.cs |
|
||||
| StRS-002 | - | SwRS-046 | CryptoUtils.cs / TicketBL.cs |
|
||||
| StRS-002 | - | SwRS-057 | TicketExpiredException.cs |
|
||||
| StRS-003 | SyRS-004 | SwRS-005 | TwoFactorAuthenticationBL.cs |
|
||||
| StRS-004 | SyRS-005 | SwRS-006 | DataSecurityBL.cs |
|
||||
| StRS-004 | - | SwRS-032 (HYPOTHESE) | Documents/Dsgvo (Ordner) |
|
||||
| StRS-005 | SyRS-006 (HYPOTHESE) | SwRS-007 | PasswordManagementAccessLogBL.cs / PasswordManagementKeywordBL.cs |
|
||||
| StRS-005 | SyRS-006 (HYPOTHESE) | SwRS-020 | MasterPasswordConfigurationDatabaseStorage.cs |
|
||||
| StRS-006 | SyRS-007 | SwRS-008 | AutomaticFacturaBL.cs |
|
||||
| StRS-006 | - | SwRS-096 | ContractBL.cs (Kontingent) |
|
||||
| StRS-007 | SyRS-008 | SwRS-009 | InvoiceBL.cs (`UpdateDueDate`) |
|
||||
| StRS-007 | - (SwRS-009) | SwRS-022 | AssetConditionBL.cs |
|
||||
| StRS-008 | SyRS-009 | SwRS-010 | InvoiceBL.cs (`DoAfterStoreTrans`) |
|
||||
| StRS-008 | SyRS-009 | SwRS-099 | CashBookBookingBL.cs |
|
||||
| StRS-009 | - | SwRS-011 | AppointmentRequestBL.cs |
|
||||
| - | SyRS-010 | SwRS-012 | CPraConnectorBL.cs |
|
||||
| StRS-016 | - | SwRS-081 | SupplierOrderPerBranchBL.cs |
|
||||
| StRS-019 | - | SwRS-104 (HYPOTHESE) | TicketProjectBL.cs |
|
||||
| - | SyRS-015 | SyRS-003 (Querverweis) | README.md (WebCart) / Authorization-Filter |
|
||||
| - | - | SwRS-053 ↔ SwRS-054 (Geschwister) | AccountDeviceBL.cs / AssetManagementArticleAssignmentBL.cs |
|
||||
| - | - | SwRS-048 ↔ SwRS-068 (Geschwister) | CentronChecklistBL.cs / MailingDataBL.cs |
|
||||
| - | - | SwRS-009 ↔ SwRS-022 (Geschwister) | InvoiceBL.cs / AssetConditionBL.cs |
|
||||
| - | - | SwRS-056 ↔ SwRS-116 (Geschwister) | EDIDispatcherBL.cs / Centron.Gateway |
|
||||
| - | - | SwRS-114 ↔ SwRS-115 (Geschwister) | CentronMsSql2008Dialect.cs / PersistedEntity.cs |
|
||||
|
||||
## Abschnitt B - Eigenständige Anforderungen ohne Ebenen-übergreifende Verknüpfung
|
||||
|
||||
Diese Anforderungen decken je ein Modul der Mindestabdeckung (Schritt 0b) ab und stehen bewusst
|
||||
allein auf ihrer jeweiligen Ebene. Vollständige Liste mit Titel, Modulbezug und Beleg: siehe die
|
||||
jeweilige ID in `StRS.md` / `SyRS.md` / `SwRS.md` (Feld `Belege`).
|
||||
|
||||
**StRS ohne SyRS/SwRS-Kette:** StRS-010 (Accounts), StRS-011 (RMA), StRS-012 (Mitarbeiterverfügbarkeit),
|
||||
StRS-013 (Chats), StRS-014 (MyDay), StRS-015 (PasswordManager/Guidelines), StRS-017 (PDF-Signatur),
|
||||
StRS-018 (Statistik), StRS-020 (Warehousing/Artikelstamm).
|
||||
|
||||
**SyRS ohne StRS/SwRS-Kette:** SyRS-011 (Warehousing/Stock), SyRS-012 (RiverDivo), SyRS-014 (WPF-Client).
|
||||
|
||||
**SwRS ohne StRS/SyRS-Kette (Mindestabdeckung, ca. 95 Einträge):** SwRS-013 bis SwRS-019, SwRS-021,
|
||||
SwRS-023 bis SwRS-027, SwRS-029 bis SwRS-031, SwRS-033 bis SwRS-037, SwRS-039 bis SwRS-045,
|
||||
SwRS-047 bis SwRS-049, SwRS-050 bis SwRS-052, SwRS-058 bis SwRS-067, SwRS-069 bis SwRS-080,
|
||||
SwRS-082 bis SwRS-095, SwRS-097, SwRS-098, SwRS-100 bis SwRS-103, SwRS-105 bis SwRS-113,
|
||||
SwRS-117 bis SwRS-121. Jede dieser IDs trägt einen eigenen `Belege`-Block mit Artefaktverweis
|
||||
(siehe `SwRS.md`); eine tabellarische Wiederholung aller Artefaktpfade an dieser Stelle würde die
|
||||
Belege aus `SwRS.md` nur redundant duplizieren.
|
||||
|
||||
## Abschnitt C - Modul-zu-Anforderungs-Zuordnung
|
||||
|
||||
Siehe `Analysebericht.md`, Abschnitt „Abdeckungstabelle" für die vollständige Zuordnung aller 133
|
||||
Inventarmodule zu den sie abdeckenden Anforderungs-IDs.
|
||||
+220
@@ -0,0 +1,220 @@
|
||||
# Messprotokoll – Versuch 01 (V1 Baseline, Prompt-only) – Prompt-Version 02
|
||||
|
||||
## Lauf
|
||||
- **Prompt-Datei:** `Versuche/Versuch_01/02_Prompt.md`
|
||||
- **Prompt-Version:** 02 – vom User ausdrücklich benannt; entspricht zugleich der Regel „höchste
|
||||
vorhandene Prompt-Versionsnummer". Wiederholungslauf zur Varianzbestimmung in derselben Zelle.
|
||||
- **SHA-256 (Prompt):** `F9B2A1AAB45DDCB87E905B83F24D7B1C7860D81CA07E503E51222E266E0D7849`
|
||||
- **Startzeit:** 2026-08-26T09:43:17.7450548+02:00
|
||||
- **Endzeit:** 2026-08-26T10:14:19.0479668+02:00
|
||||
- **Dauer gesamt:** 0:31:01 (`duration_ms` 0:30:59; API: 0:30:27)
|
||||
— **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 (Skill 4.2.1)
|
||||
- **Prompt-Repo-Commit:** `7df384f6d2e7249dc914a74e299fe7fa71ece748`
|
||||
|
||||
## Werkzeugkonfiguration
|
||||
- **Skill-Version:** 4.2.1
|
||||
- **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-sonnet-5`
|
||||
- **Modelle (tatsächlich eingesetzt):** `claude-sonnet-5` 12.948.920 Tokens (99.95 %), `claude-haiku-4-5-20251001` 6.965 Tokens (0.05 %)
|
||||
- **Kontrolle Modell:** bestanden – ausschließlich das angeforderte Modell plus Haiku als zulässiger interner Hilfsaufruf
|
||||
- **Effort:** `high` (per `--effort high` gesetzt)
|
||||
- **Laufverzeichnis-ID:** `v4.2.1-c69e`
|
||||
- **Ablage:** `Iteration 2/claude-sonnet-5/solo/high/`
|
||||
- **Parallele Läufe:** **ja** – zeitgleich liefen:
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-3983`
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-4840`
|
||||
- `02_Lauf_2026-08-26_094249_v4.2.1-f631`
|
||||
|
||||
Die Zeitangaben dieses Laufs sind daher **nicht** für Laufzeitvergleiche zu verwenden.
|
||||
Tokenverbrauch, Anforderungszahl und Denials bleiben unverzerrt.
|
||||
- **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 | 160 |
|
||||
| Output-Tokens | 201.013 (davon 36.030 Thinking-Tokens) |
|
||||
| Cache-Write-Tokens | 455.256 |
|
||||
| Cache-Read-Tokens | 12.292.491 |
|
||||
| Agent-Turns | 190 |
|
||||
|
||||
### Gesamtlauf inkl. Subagenten (`modelUsage`, abrechnungsrelevant)
|
||||
| Messgröße | `claude-sonnet-5` | `claude-haiku-4-5-20251001` | Summe |
|
||||
|---|---:|---:|---:|
|
||||
| Input-Tokens | 160 | 6.944 | 7.104 |
|
||||
| Output-Tokens | 201.013 | 21 | 201.034 |
|
||||
| Cache-Write-Tokens | 455.256 | 0 | 455.256 |
|
||||
| Cache-Read-Tokens | 12.292.491 | 0 | 12.292.491 |
|
||||
| **Tokens gesamt** | **12.948.920** | **6.965** | **12.955.885** |
|
||||
|
||||
**Tokens gesamt: 12.955.885** — 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 | 9 | 5,6 % |
|
||||
| SyRS | 10 | 6,2 % |
|
||||
| SwRS | 141 | 88,1 % |
|
||||
| **Gesamt** | **160** | 100 % |
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 49 | 30,6 % |
|
||||
| Daten | 42 | 26,2 % |
|
||||
| nicht-funktional | 28 | 17,5 % |
|
||||
| Sicherheit | 26 | 16,2 % |
|
||||
| Schnittstelle | 15 | 9,4 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 175 |
|
||||
| davon `PRIMÄR` | 119 (68,0 %) |
|
||||
| davon `SEKUNDÄR` | 40 (22,9 %) |
|
||||
| davon `KONTEXT` | 16 (9,1 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 118 (73,8 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 144 | 90,0 % |
|
||||
| workaround | 4 | 2,5 % |
|
||||
| sonderfall | 5 | 3,1 % |
|
||||
| veraltet | 7 | 4,4 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 129 | 80,6 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 31 | 19,4 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 24 | 15,0 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 28 | 17,5 % |
|
||||
|
||||
### 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** – 2 von 42 ungedeckt: SwRS-022, SwRS-028 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 160 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 160 von 160 mit Tracelinks (100,0 %) |
|
||||
|
||||
## Ergebnis
|
||||
- **Status:** erfolgreich (`is_error` = false, `subtype` = `success`, `stop_reason` = `end_turn`, `terminal_reason` = `completed`)
|
||||
- **Session-ID:** `23c09a3e-53aa-4a46-8d28-9def5318a50a`
|
||||
- **Permission-Denials:** 0 – **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` | 31.572 B |
|
||||
| `Glossar.md` | 4.161 B |
|
||||
| `Hypothesen.md` | 5.386 B |
|
||||
| `StRS.md` | 15.304 B |
|
||||
| `SwRS.md` | 173.502 B |
|
||||
| `SyRS.md` | 14.489 B |
|
||||
| `Traceability.md` | 4.623 B |
|
||||
|
||||
- **Root unverändert:** ja – `before.txt` und `after.txt` sind beide leer (zeilenendennormalisiert verglichen)
|
||||
- **Abschlusstext des Agenten:** siehe `RawResult.json` (`result`)
|
||||
|
||||
## Anmerkungen/Auffälligkeiten
|
||||
|
||||
**1. Parallelbetrieb – Zeitangaben unbrauchbar, Verbrauchsgrößen gültig.** Dieser Lauf ist einer
|
||||
von vier gleichzeitig gestarteten Wiederholungen derselben Zelle. Wanduhrzeit, `duration_ms` und
|
||||
`duration_api_ms` sind dadurch verzerrt, weil die vier um CPU, Netz und API-Kontingent
|
||||
konkurrierten. Tokenverbrauch, Anforderungszahl, Belegkennzahlen und Denials sind davon nicht
|
||||
betroffen und uneingeschränkt verwertbar. Einziger gültiger Laufzeitmesspunkt der Zelle bleibt der
|
||||
serielle Lauf `084301_v4.2.0-d6f9` mit 45:04.
|
||||
|
||||
**2. CLI-Version 2.1.246 statt der verifizierten 2.1.245.** Die für den Modus `solo`
|
||||
entscheidende Kontrolle (`subagent_stats.spawned` = 0) wurde gegengeprüft und ist erfüllt; die
|
||||
Feldnamen von `RawResult.json` sind unverändert.
|
||||
|
||||
**3. Skill-Version 4.2.1 gegenüber 4.2.0 des seriellen Laufs – keine Bedingungsänderung.** Der
|
||||
einzige Unterschied ist der Pfadfilter der Root-Prüfung (`git status --porcelain -- <pfad>`), eine
|
||||
korrigierte Messung. Die fünf Läufe der Zelle bleiben untereinander vergleichbar.
|
||||
|
||||
**4. Dieser Lauf hat einen Defekt im Auswerteskript aufgedeckt.** `analyse-anforderungen.py`
|
||||
leitete die Ebene einer Anforderung bis dahin aus dem **Dateinamen** ab. Dieser Lauf legte jedoch
|
||||
12 StRS- und 5 SyRS-Blöcke in `SwRS.md` ab. Die Auswertung meldete daraufhin 9 / 10 / 141 statt der
|
||||
tatsächlichen 21 / 15 / 124 – die Gesamtzahl stimmte, die Verteilung nicht. Der Agent selbst hatte
|
||||
in seinem Abschlusstext korrekt 21 / 15 / 124 berichtet; das Skript widersprach ihm zu Unrecht.
|
||||
Behoben in Skill-Version 4.3.0: Die Ebene kommt jetzt aus dem Feld `Ebene:`, hilfsweise aus dem
|
||||
ID-Präfix, erst zuletzt aus der Datei; Fremdablage wird als eigene Auffälligkeit ausgewiesen.
|
||||
Gegenprobe: Der sauber abgelegte Lauf `d6f9` liefert unverändert 20 / 120 / 30, und alle 24 Läufe
|
||||
von Tag 1 sind frei von Fremdablage – die dortigen Protokolle bleiben gültig. **Die in diesem
|
||||
Protokoll ausgewiesene Verteilung ist bereits die korrigierte.**
|
||||
|
||||
**5. Die Fremdablage ist selbst ein Befund zur Set-Qualität.** 17 von 160 Anforderungen stehen in
|
||||
der Datei einer anderen Ebene. Damit ist die Dreiteilung StRS / SyRS / SwRS nicht mehr an der
|
||||
Dateistruktur ablesbar – für eine Spezifikation, die als Migrationsgrundlage dienen soll, ist das
|
||||
ein Mangel, auch wenn jeder einzelne Block sein `Ebene:`-Feld korrekt führt.
|
||||
|
||||
**6. Extremste Ebenenverteilung der Zelle: 77,5 % auf SwRS.** Die Mindestabdeckung aus Schritt 0b
|
||||
wurde fast vollständig auf der Softwareebene abgelegt, während `d6f9` bei identischem Prompt
|
||||
70,6 % auf die Systemebene legte. Der Prompt schreibt vor, dass **jedes** Modul mindestens eine
|
||||
Anforderung erhält, sagt aber nicht, auf welcher Ebene. Genau darin liegt die verbliebene
|
||||
Freiheit, die die Struktur zwischen den Läufen auseinanderlaufen lässt.
|
||||
|
||||
**7. Niedrigster Tokenverbrauch der Zelle bei mittlerer Belegqualität.** 12,96 Mio. Tokens
|
||||
gegenüber 35,71 Mio. im seriellen Lauf – Faktor 2,8 bei nahezu gleicher Anforderungszahl
|
||||
(160 gegenüber 170). `PRIMÄR` liegt mit 68,0 % im Mittelfeld, zwei risikorelevante Anforderungen
|
||||
sind ungedeckt (SwRS-022, SwRS-028).
|
||||
|
||||
**8. Inventar mit 133 Modulen, davon 3 begründet nicht analysiert** (Licensing, Start,
|
||||
Nexus-Host). Der Agent trennt fachliche Module von technischen Querschnittskomponenten – wieder
|
||||
ein eigener Inventarbegriff. Er weist zudem selbst darauf hin, dass `Sales/Support` mit rund 50
|
||||
Klassen der größte Einzelbereich ist und in der Modulgruppierung unterrepräsentiert blieb.
|
||||
|
||||
**9. Sauberster Lauf der Zelle in der Werkzeugnutzung:** 0 Permission-Denials, genau die sieben
|
||||
geforderten Dateien, kein Rest an Arbeitsdateien.
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"is_error":false,"duration_api_ms":1827379,"num_turns":190,"stop_reason":"end_turn","session_id":"23c09a3e-53aa-4a46-8d28-9def5318a50a","total_cost_usd":6.297021199999999,"usage":{"input_tokens":160,"cache_creation_input_tokens":455256,"cache_read_input_tokens":12292491,"output_tokens":201013,"output_tokens_details":{"thinking_tokens":36030},"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":455256,"ephemeral_5m_input_tokens":0},"inference_geo":"not_available","iterations":[{"input_tokens":2,"output_tokens":568,"cache_read_input_tokens":330622,"cache_creation_input_tokens":808,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":808},"type":"message"}],"speed":"standard"},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":6944,"outputTokens":21,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.007049,"contextWindow":200000,"maxOutputTokens":32000,"canonicalModel":"claude-haiku-4-5","provider":"firstParty","costBasis":"list"},"claude-sonnet-5":{"inputTokens":160,"outputTokens":201013,"cacheReadInputTokens":12292491,"cacheCreationInputTokens":455256,"webSearchRequests":0,"costUSD":6.2899721999999985,"contextWindow":1000000,"maxOutputTokens":64000,"canonicalModel":"claude-sonnet-5","provider":"firstParty","costBasis":"list"}},"permission_denials":[],"terminal_reason":"completed","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":null,"result":"All 7 required deliverable files are complete in the output directory:\n\n- **StRS.md** (21 requirements), **SyRS.md** (15), **SwRS.md** (124) — 160 requirements total, every one with Fakt/Aussage separation, classified evidence, acceptance criteria, traceability, consolidation assessment, and adoption classification\n- **Analysebericht.md** — module inventory (133 rows), coverage table, consistency check (no duplicate IDs, no unevidenced requirements, no dangling tracelinks, risk-requirement evidence table), self-assessment\n- **Traceability.md**, **Hypothesen.md** (31 entries, cross-checked against inline markers), **Glossar.md**\n\nKey findings from the run:\n- **Security cluster** (Rights/Auth/2FA/DSGVO/PasswordManager) traced to primary evidence, including a fail-closed rights check and a REST API authorization filter\n- **Notable finding**: the internal password vault (`PasswordManagementKeywordBL`) never assigns the plaintext password parameter to the entity and has no discoverable decryption — flagged as `[HYPOTHESE]` with the exact code evidence, not asserted as fact\n- **Billing cluster** (automatic invoicing, due-date calculation, cash-book booking) fully chained across all three levels\n- Identified that `Sales/Support` (~50 classes) is the largest single functional area and was under-represented in the initial module grouping — called out for a dedicated deep-dive in the next iteration\n\nEvery one of the 133 inventory modules has either a requirement or a documented reason it doesn't (3 modules: Licensing, Start, Nexus-Host — each with justification).","ttft_ms":2880,"ttft_stream_ms":1227,"time_to_request_ms":106,"type":"result","duration_ms":1859846,"uuid":"b1f3bcd0-9582-4539-9efa-be5907ddb443","queued_turn_count":0}
|
||||
+3057
File diff suppressed because it is too large
Load Diff
+68
@@ -0,0 +1,68 @@
|
||||
## 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 | 21 | 13,1 % |
|
||||
| SyRS | 15 | 9,4 % |
|
||||
| SwRS | 124 | 77,5 % |
|
||||
| **Gesamt** | **160** | 100 % |
|
||||
|
||||
|
||||
> **Auffälligkeit – Ebene weicht von der Ablagedatei ab.** 17 von 160 Anforderungen stehen in der Datei einer anderen Ebene: 12 × StRS-Block in `SwRS.md`, 5 × SyRS-Block in `SwRS.md`. Die Ebene wurde aus dem Feld `Ebene:` beziehungsweise dem ID-Präfix bestimmt, nicht aus dem Dateinamen. Für die Set-Qualität ist das relevant: Die Dreiteilung StRS / SyRS / SwRS ist dann nicht mehr an der Dateistruktur ablesbar.
|
||||
|
||||
### Anforderungstypen
|
||||
|
||||
| Typ | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| funktional | 49 | 30,6 % |
|
||||
| Daten | 42 | 26,2 % |
|
||||
| nicht-funktional | 28 | 17,5 % |
|
||||
| Sicherheit | 26 | 16,2 % |
|
||||
| Schnittstelle | 15 | 9,4 % |
|
||||
|
||||
### Belegqualität
|
||||
|
||||
| Messgröße | Wert |
|
||||
|---|---:|
|
||||
| Belege gesamt | 175 |
|
||||
| davon `PRIMÄR` | 119 (68,0 %) |
|
||||
| davon `SEKUNDÄR` | 40 (22,9 %) |
|
||||
| davon `KONTEXT` | 16 (9,1 %) |
|
||||
| Belege je Anforderung (Median) | 1,0 |
|
||||
| Anforderungen mit mindestens einem `PRIMÄR`-Beleg | 118 (73,8 %) |
|
||||
|
||||
### Übernahmewürdigkeit
|
||||
|
||||
| Einstufung | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| übernehmen | 144 | 90,0 % |
|
||||
| workaround | 4 | 2,5 % |
|
||||
| sonderfall | 5 | 3,1 % |
|
||||
| veraltet | 7 | 4,4 % |
|
||||
|
||||
### Status
|
||||
|
||||
| Kategorie | Anzahl | Anteil |
|
||||
|---|---:|---:|
|
||||
| belegt | 129 | 80,6 % |
|
||||
| als `HYPOTHESE` gekennzeichnet | 31 | 19,4 % |
|
||||
| als Workaround vermerkt | 0 | 0,0 % |
|
||||
| Konsolidierungskandidaten | 24 | 15,0 % |
|
||||
| mit ISO-25010-Qualitätsmerkmal | 28 | 17,5 % |
|
||||
|
||||
### 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** – 2 von 42 ungedeckt: SwRS-022, SwRS-028 |
|
||||
| **Verifizierbarkeit** – jede Anforderung mit Prüfidee oder Akzeptanzkriterium | **erfüllt** |
|
||||
| **Übernahmewürdigkeit** – Einstufung für die Migrationsperspektive | **erfüllt** (alle 160 Anforderungen eingestuft) |
|
||||
| **Traceability** – Verknüpfung zwischen den Ebenen | 160 von 160 mit Tracelinks (100,0 %) |
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
|
||||
+177
@@ -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\Tag 2\claude-sonnet-5\solo\high\02_Lauf_2026-08-26_094250_v4.2.1-c69e\Ergebnisse\`.
|
||||
Verändere keine Dateien im Arbeitsverzeichnis (der analysierten Codebasis).
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T10:14:19.0479668+02:00
|
||||
+1
@@ -0,0 +1 @@
|
||||
2026-08-26T09:43:17.7450548+02:00
|
||||
Reference in New Issue
Block a user