Files
go-documenter/doc/requirements/06-ablage.md
T
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

49 lines
2.3 KiB
Markdown

# 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.
```gherkin
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` |