Files
nexarch/docs/DOK-02-PRUEFPROTOKOLL.md
patrickandClaude Sonnet 5 04ee1b6863
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
DOK-02: akten-ordnerstruktur-migration
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>
2026-10-13 12:03:52 +00:00

5.8 KiB
Raw Permalink Blame History

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 (memorySource in dms/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-mustermann usw.) 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-Testdatenbank dms_dev auf 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

  1. Jede Akte/jeder Ordner ist nach der Migration mit derselben Hierarchie wie im Altsystem vorhanden — erfüllt (Prüfung 1).
  2. Jedes migrierte Dokument ist der korrekten Akte zugeordnet — erfüllt (TestMigrateAll_AkzeptanzkriteriumDokumenteKorrektVerknuepft, Prüfung 2 indirekt über Zähl-Deckungsgleichheit).

Entscheidungen / Open Items

  • Entscheidung: DocumentFolders als eigene Source-Methode (statt Erweiterung von SourceDocument aus DOK-01), damit migrationfolder unabhängig von migrationdocuments Source- Interface bleibt und beide Migrationsschritte unabhängig voneinander lauffähig sind (DOK-01 bereits gemergt, kein Eingriff in dessen Interface).
  • Entscheidung: deriveUUID in migrationfolder dupliziert (statt aus migrationdocument exportiert) — 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).