feat(dokumente): DOC-004 Original-vs-Kopie-Kennzeichnung
CI / backend-tests (push) Successful in 2m16s
CI / frontend-build (push) Successful in 27s

Neues Feld ist_original (Boolean, Migration 0029) - explizit beim Upload
und beim Ersetzen (DOC-003) setzbar, kein Default in eine Richtung erraten.
Wird beim Ersetzen bewusst NICHT vom Vorgänger übernommen (neue Version
könnte ein nachgereichtes Original sein, das eine bisherige Kopie ersetzt,
oder umgekehrt). Frontend: Checkbox "Original (nicht nur Kopie/Scan)" im
Upload-Formular, "Original"-Badge in der Dokumentenliste.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-08 12:16:25 +02:00
co-authored by Claude Sonnet 5
parent 17cac8543f
commit ae09433c11
10 changed files with 118 additions and 5 deletions
+9 -1
View File
@@ -56,6 +56,7 @@ async def _pruefe_und_speichere(
beschreibung: str | None,
hochgeladen_von: int,
vorgaenger_id: uuid.UUID | None,
ist_original: bool,
) -> Dokument:
if mime_type not in ERLAUBTE_MIME_TYPES:
raise DateityperlaubtError(mime_type)
@@ -94,6 +95,7 @@ async def _pruefe_und_speichere(
hochgeladen_von=hochgeladen_von,
hochgeladen_am=datetime.now(timezone.utc),
vorgaenger_id=vorgaenger_id,
ist_original=ist_original,
)
db.add(dokument)
await db.flush()
@@ -111,6 +113,7 @@ async def speichere_dokument(
dokumenttyp: DokumentTyp,
beschreibung: str | None,
hochgeladen_von: int,
ist_original: bool,
) -> Dokument:
return await _pruefe_und_speichere(
db,
@@ -123,6 +126,7 @@ async def speichere_dokument(
beschreibung=beschreibung,
hochgeladen_von=hochgeladen_von,
vorgaenger_id=None,
ist_original=ist_original,
)
@@ -135,11 +139,14 @@ async def ersetze_dokument(
inhalt: bytes,
beschreibung: str | None,
hochgeladen_von: int,
ist_original: bool,
) -> Dokument:
"""DOC-003: neue Version anlegen statt zu überschreiben - altes_dokument
bleibt unverändert als Historieneintrag erhalten, entitaet_typ/entitaet_id/
dokumenttyp werden von ihm übernommen (nicht neu wählbar, es ist dieselbe
Sache in neuer Fassung)."""
Sache in neuer Fassung). ist_original wird bewusst NICHT vom Vorgänger
übernommen (DOC-004) - die neue Version könnte z.B. ein nachgereichtes
Original sein, das die bisherige Kopie ersetzt."""
return await _pruefe_und_speichere(
db,
entitaet_typ=altes_dokument.entitaet_typ,
@@ -151,6 +158,7 @@ async def ersetze_dokument(
beschreibung=beschreibung,
hochgeladen_von=hochgeladen_von,
vorgaenger_id=altes_dokument.id,
ist_original=ist_original,
)