← Übersicht

F02 Fachliche Rechnungsidentität und Duplikatschutz korrigieren

Fachliche Rechnungsidentität und Duplikatschutz korrigieren

Finding: F02 Priorität: P0 Status: IN UMSETZUNG Stand: 2026-07-16

Problembeschreibung

  • shouldProcess prüft nur sourceId/status (IngestInvoicesUseCase.php:203).
  • SourceInvoice.rechnungsschluessel enthält sourceId (SourceInvoice.php:37); gleiche Rechnung unter neuer URL gilt als neu.
  • Nummer, Lieferant, Hash und Voucherlist sind keine zwingenden Schranken; State-Löschung entfernt den Schutz.

Ziel

Dieselbe wirtschaftliche Rechnung wird unabhängig von URL, Dateiname, State-Reset und Parallelität genau einmal verarbeitet.

Aufgabe

  1. Kanonischen Schlüssel aus Lieferant, echter Nummer und Datum definieren.
  2. SHA-256 und Konfliktregeln ergänzen.
  3. Lokalen Index und Voucherlist vor Posting prüfen; Bestand ohne Reposting migrieren.

Scope

  • In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
  • Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.

Harte Spezifikation

  • MUST: Identität URL-/Pfad-unabhängig.
  • MUST: gleicher Hash/neue URL wird nicht gepostet.
  • MUST: gleiche Nummer/anderer Hash blockiert.
  • MUST: leerer Local-State plus Remote-Beleg erzeugt 0 POSTs.

Harte Quality Gateways

  • Vollständige URL/Hash/Nummern-Matrix grün.
  • Zwei Parallelworker erzeugen einen Intent.
  • Realer Beleg wird RF183233049809, nicht 148077689, zugeordnet.
  • Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.

Code Blast

  • Direkt: SourceInvoice, InvoiceRecord/State, Ingest, State-Adapter, LexofficePort.
  • Datenmigration; lesender Voucherlist-Abgleich.

Code-Impact-Analyse

  • Schützt nach Portalwechsel/Reset.
  • Konflikte werden sichtbar und benötigen Operator-Workflow.

Risikoanalyse

| Risiko | Eintritt | Schaden | |---|---|---| | Duplikat nach URL-Wechsel | hoch | kritisch | | Falsch-positive Dublette | mittel | hoch |

Strategie zur Risikonullierung

  1. Prevent: Schlüssel plus Hash.
  2. Detect: lokal/remote.
  3. Contain: Quarantäne.
  4. Recover: auditierte Entscheidung.

Abschlussnachweis

Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.

Supervisionsfortschritt 2026-07-16

  • URL-unabhaengiger Schluessel, PDF-SHA-256 und kanonische Identitaet aktiv; Test mit geaenderter URL bleibt bei 1 Posting. Finaler Realbeleg steht aus.

Frühere Versionen

VersionZeitpunktOperation
33 2026-07-16 19:53:19.686784+02 UPDATE