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