Files
Christoph Kroczek 6e6cb0dc8d M0: arc42-Konzeptdokument, Gherkin-Anforderungen und OpenAPI-Vertrag
- doc/architecture.md: arc42-Detaildokument mit Mermaid-Diagrammen
  (Bausteinsicht, Klassendiagramm, Statusmodell, 5 Sequenzdiagramme),
  Speicherkonzept, DEC-01..19-Entscheidungen mit Trade-offs
- doc/requirements/: 7 Features als Gherkin-Szenarien (TDD-Grundlage)
  mit Traceability-Tabellen Szenario <-> Stdlib-Testname
- doc/openapi.yaml: API-Vertrag fuer alle 9 Endpunkte (Quelle der Wahrheit)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 15:20:48 +02:00

2.3 KiB

Feature: Finale Ablage in Jahresordnern

Als Nutzer möchte ich, dass verarbeitete Dokumente unverändert und nachvollziehbar benannt in einer Jahresstruktur abgelegt werden und über die UUID im Dateinamen jederzeit ihrem Kontext in der Datenbank zuzuordnen sind.

Funktionalität: Finale Ablage

  Szenario: Verarbeitetes Dokument landet im Jahresordner
    Angenommen ein am 2026-07-12 importiertes Dokument
    Wenn die File-Stage läuft
    Dann liegt die Datei unter archive/2026/
    Und ein Event "DocumentFiled" mit dem relativen archive_path wird aufgezeichnet
    Und die Datei liegt nicht mehr im Staging

  Szenario: Dateiname enthält UUID und optional den Importzeitstempel
    Angenommen die Konfiguration filename_timestamp=true
    Wenn ein Dokument "Rechnung Stadtwerke.pdf" abgelegt wird
    Dann entspricht der Dateiname dem Muster {JJJJMMTT-HHMMSS}_rechnung-stadtwerke_{uuid}.pdf
    Und bei filename_timestamp=false entfällt nur das Zeitstempel-Präfix

  Szenario: Jahresordner folgt dem Importzeitpunkt
    Angenommen ein Dokument mit LLM-erkanntem doc_date "2019-03-01", importiert 2026
    Wenn es abgelegt wird
    Dann liegt es in archive/2026/ (Importjahr, nicht Dokumentjahr)

  Szenario: Ablage über Volume-Grenzen ist atomar sicher
    Angenommen Staging und Archiv liegen auf unterschiedlichen Dateisystemen
    Wenn die File-Stage läuft
    Dann wird per Kopie mit fsync und anschließendem Rename verschoben
    Und zu keinem Zeitpunkt ist im Archiv eine unvollständige Datei sichtbar

  Szenario: Datei ist über die API abrufbar
    Angenommen ein abgelegtes Dokument
    Wenn GET /v1/documents/{id}/file aufgerufen wird
    Dann wird die unveränderte Originaldatei mit korrektem Content-Type gestreamt

Traceability

Szenario Go-Test (Pakete internal/storage, internal/pipeline, internal/api)
Verarbeitetes Dokument landet im Jahresordner TestFileStage_MovesToYearFolder
Dateiname enthält UUID und optional den Importzeitstempel TestFiler_FilenamePatternWithUUIDAndTimestamp
Jahresordner folgt dem Importzeitpunkt TestFiler_YearFromImportDateNotDocDate
Ablage über Volume-Grenzen ist atomar sicher TestStorage_CrossDeviceMoveIsAtomic
Datei ist über die API abrufbar TestGetFile_StreamsOriginal