Neues Paket dms/internal/migrationfolder migriert archivdms' akten-Tabelle strukturell 1:1 nach DOC-09 (folders, Materialized Path) und verknuepft bereits migrierte Dokumente (DOK-01) mit ihrer Ziel-Akte ueber documents.folder_id. Deterministische Ziel-IDs analog migrationdocument machen erneute Laeufe idempotent, Zyklen in der Quellhierarchie werden erkannt statt Endlosrekursion auszuloesen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
5.8 KiB
DOK-02 – Prüfprotokoll: Akten-/Ordnerstruktur-Migration
Umsetzung
Neues Paket dms/internal/migrationfolder (analog zu DOK-01s
dms/internal/migrationdocument): migriert archivdms' akten-Tabelle
strukturell 1:1 nach DMS DOC-09 (folders, Materialized Path,
dms/migrations/tenant/0006_folders_materialized_path.up.sql) und
verknüpft anschließend bereits migrierte Dokumente (DOK-01) mit ihrer
Ziel-Akte über documents.folder_id.
- Ziel-IDs werden wie bei DOK-01 deterministisch aus den Quell-IDs
abgeleitet (
deriveUUID, Namespace"folder"bzw."document") — ein erneuter Lauf gegen dieselbe Quelle erzeugt keine Duplikate, ohne separate Mapping-Tabelle. - Hierarchie- und Pfadaufbau erfolgt rekursiv über die Quell-Eltern-
referenzen (Memoisierung je Akte), mit Zyklus-Erkennung
(
ErrCycle) statt Endlosrekursion. - Bewusst NICHT migriert: das trainierte ML-Klassifikator-Binärmodell (Produkt-DNA-Vorgabe) — dieses Paket übernimmt ausschließlich die strukturellen Metadaten der Akten/Ordner.
DSGVO: Substitution durch synthetische Daten
Gemäß Produktarchitektur- und Sicherheitskonzept-Vorgaben wurde ausschließlich synthetisches Testmaterial verwendet, niemals ein Export aus archivdms oder einem anderen Altsystem:
- Die Testquelle (
memorySourceindms/internal/migrationfolder/migrate_test.go) ist eine rein In-Memory erfundene Akten-Hierarchie ("Mandant Mustermann" → "Vorgang Hauskauf" → "Unterlagen", "Mandant Schmidt") mit frei erfundenen Quell-IDs (akte-mandant-mustermannusw.) und einem generischen Platzhalterbenutzer (archivdms-user-1). - Es bestand zu keinem Zeitpunkt eine Verbindung zu
archivdms(Host/DB tabu laut Auftrag). Die Zieldatenbank war die Wegwerf-Testdatenbankdms_devauf Host 192.168.1.204, dort jeweils in einem frisch angelegten, isolierten Schema (dms/internal/testdb), das nach dem Testlauf automatisch wieder entfernt wird. - Kein Kontakt zu Host 192.168.1.131.
Prüfungen vor der Abnahme
Prüfung 1 — Stichprobe von 10 Aktenpfaden vor/nach Migration verglichen
Mangels Zugriffs auf echte archivdms-Daten (DSGVO-Vorgabe) wurde diese
Prüfung gegen die synthetische Fixture durchgeführt und zusätzlich mit
einer erweiterten 20-Ebenen-Tiefenprobe in
dms/internal/folder/folder_test.go
(TestCreate_ArbitraryDepthHierarchy, bereits vorhandener DOC-09-Test)
abgedeckt. Für DOK-02 selbst prüft
TestMigrateAll_AkzeptanzkriteriumHierarchieErhalten exemplarisch:
| Quell-Aktenpfad (archivdms, synthetisch) | Ziel-Pfad (DMS, Materialized Path) | Ergebnis |
|---|---|---|
akte-mandant-mustermann |
/<id-mustermann>/ |
übereinstimmend |
akte-mandant-mustermann/akte-vorgang-kauf |
/<id-mustermann>/<id-kauf>/ |
übereinstimmend (Präfix erhalten) |
.../akte-vorgang-kauf/akte-vorgang-kauf-unterlagen |
/<id-mustermann>/<id-kauf>/<id-unterlagen>/ |
übereinstimmend (Präfix erhalten) |
akte-mandant-schmidt |
/<id-schmidt>/ |
übereinstimmend |
Ergebnis: PASS — Hierarchie- und Elternreferenzen stimmen zwischen
Quelle und Ziel überein (parent_folder_id, Pfad-Präfixe geprüft per
Test-Assertion). Eine vollständige 10-Pfad-Stichprobe gegen echte
Produktionsdaten ist nach dem Rollout auf echter archivdms-Quelle
nachzuholen (außerhalb des Scopes dieser Session, siehe Open Items).
Prüfung 2 — Anzahl Ordner/Akten je Tenant deckungsgleich mit Quelle
TestMigrateAll_AkzeptanzkriteriumHierarchieErhalten zählt die
migrierten Akten (res.FoldersMigrated == 4) gegen die tatsächliche
Zeilenzahl in folders (SELECT count(*) FROM folders == 4) für den
Ziel-Tenant — deckungsgleich mit den 4 Quell-Akten der Fixture.
TestMigrateAll_Wiederholbar bestätigt zusätzlich, dass ein erneuter
Lauf die Zählung nicht verändert (keine Duplikate je Tenant).
Ergebnis: PASS.
Automatisierte Tests (Akzeptanzkriterien)
Ausgeführt auf Testhost root@192.168.1.204 gegen die Wegwerf-DB
dms_dev (isoliertes Schema je Testlauf):
go test ./internal/migrationfolder/... -v
=== RUN TestMigrateAll_AkzeptanzkriteriumHierarchieErhalten
--- PASS (0.17s)
=== RUN TestMigrateAll_AkzeptanzkriteriumDokumenteKorrektVerknuepft
--- PASS (0.16s)
=== RUN TestMigrateAll_Wiederholbar
--- PASS (0.16s)
=== RUN TestMigrateAll_ZyklusWirdErkannt
--- PASS (0.11s)
PASS
Zusätzlich als Regressionskontrolle (keine Seiteneffekte auf
Nachbarpakete) ausgeführt und PASS:
./internal/folder/..., ./internal/migrationdocument/....
go vet ./... (gesamtes Repo-Modul) ohne Befunde.
Akzeptanzkriterien — Status
- Jede Akte/jeder Ordner ist nach der Migration mit derselben Hierarchie wie im Altsystem vorhanden — erfüllt (Prüfung 1).
- Jedes migrierte Dokument ist der korrekten Akte zugeordnet —
erfüllt (
TestMigrateAll_AkzeptanzkriteriumDokumenteKorrektVerknuepft, Prüfung 2 indirekt über Zähl-Deckungsgleichheit).
Entscheidungen / Open Items
- Entscheidung:
DocumentFoldersals eigene Source-Methode (statt Erweiterung vonSourceDocumentaus DOK-01), damitmigrationfolderunabhängig vonmigrationdocuments Source- Interface bleibt und beide Migrationsschritte unabhängig voneinander lauffähig sind (DOK-01 bereits gemergt, kein Eingriff in dessen Interface). - Entscheidung:
deriveUUIDinmigrationfolderdupliziert (statt ausmigrationdocumentexportiert) — kleinste Änderung, kein Export-Refactor eines bereits gemergten Pakets nötig; Algorithmus ist bitidentisch (gleicher Namespace-String ergibt dieselbe ID). - Open Item: Echte 10-Pfad-Stichprobe gegen eine tatsächliche archivdms-Instanz ist laut DSGVO-Vorgabe dieser Session nicht durchführbar und somit außerhalb des Scopes; vor produktivem Rollout nachzuholen, sobald eine kontrollierte archivdms-Quelle verfügbar ist (gleiches Vorgehen wie bei DOK-01 vermutlich bereits etabliert).