# Dokument-Versionierung Alle Compliance-Dokumente (DSFA, VVT, TOM, Loeschfristen, Pflichten) werden automatisch versioniert. Jede Aenderung erzeugt eine neue Version mit Snapshot, Change-Summary und geaenderten Sektionen. ## Architektur Das Versionierungs-Pattern folgt dem bestehenden `compliance_legal_document_versions`-Ansatz: - Separate Versions-Tabelle pro Dokumenttyp - Snapshot als JSONB (vollstaendiger Dokumentstand) - Status-Workflow: draft → approved - `current_version` Column auf der Haupt-Tabelle ## Unterstuetzte Dokumenttypen | Typ | Versions-Tabelle | FK-Column | |-----|-----------------|-----------| | DSFA | `compliance_dsfa_versions` | `dsfa_id` | | VVT | `compliance_vvt_activity_versions` | `activity_id` | | TOM | `compliance_tom_versions` | `measure_id` | | Loeschfristen | `compliance_loeschfristen_versions` | `policy_id` | | Pflichten | `compliance_obligation_versions` | `obligation_id` | ## API-Endpoints Fuer jeden Dokumenttyp gibt es zwei Versioning-Endpoints: | Methode | Pfad | Beschreibung | |---------|------|--------------| | `GET` | `/{id}/versions` | Alle Versionen (neueste zuerst) | | `GET` | `/{id}/versions/{v}` | Spezifische Version mit Snapshot | ### Beispiele ``` GET /api/compliance/dsfa/{dsfa_id}/versions GET /api/compliance/dsfa/{dsfa_id}/versions/3 GET /api/compliance/activities/{id}/versions GET /api/compliance/measures/{id}/versions GET /api/compliance/loeschfristen/{id}/versions GET /api/compliance/obligations/{id}/versions ``` ## Shared Helper `versioning_utils.py` stellt drei Funktionen bereit: ```python create_version_snapshot(db, doc_type, doc_id, tenant_id, snapshot, change_summary, changed_sections, created_by) list_versions(db, doc_type, doc_id, tenant_id) get_version(db, doc_type, doc_id, tenant_id, version_number) ``` ## Frontend-Komponente Die `VersionHistory` React-Komponente zeigt eine Timeline aller Versionen: ```tsx ``` Features: - Expandierbare Timeline mit Version-Dots - Status-Badges (approved/draft) - Datum und geaenderte Sektionen - Change-Summary ## Datenbank ### Migration 037 Erstellt 5 Versions-Tabellen und fuegt `current_version INTEGER DEFAULT 0` zu allen Quell-Tabellen hinzu. ## Tests - 20 Tests in `test_document_versions.py` - VERSION_TABLES Mapping, create/list/get Version, Route-Registrierung