diff --git a/PROGRESS.md b/PROGRESS.md index 6090906..c5c1147 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -20,7 +20,24 @@ **Abgelöst:** `export_service.py` (78 Z., CSV-only, alter /export-Endpoint) + contact-spezifische Logik in `import_export_service.py` (504 Z.) — der bewiesene Doppel-Weg wird konsolidiert. -**Phasen:** 1 Backend (Format-Registry, Standard-Formate-Plugin, Contract-Protokoll, Orchestrator, Contacts migriert) → 2 Frontend (Dialog, Toolbars, alte Seite → Übersicht) → 3 PDF separat. +### Phase 1 — Backend-Kern ✅ (cd8ef75, deployed 21:14) + +- Format-Registry `app/core/importexport_registry.py` (FormatHandler-Protokoll, `available_for()` Schnittmenge) +- `importexport_formats`-Plugin (csv/json/xlsx), lifecycle-korrekt (on_activate registriert, on_deactivate entfernt) +- ContactsContract `importexport_entities()` + `ie_*`-Methoden (Columns, Validatoren, Normalizer, Fetch, Persist mit Audit) +- `import_export_service.py` generische Engine — iteriert über `registry.list_discovered()`, keine hartcodierten Plugin-Namen +- **Funktionserhalt: 45/45 import_export-Suite passed** (inkl. Fehler-Multiplizität: 2 failed rows → 3 total_errors via ie_required + ie_row_valid-Trennung; Zwischenstand mit 2 Failures live gefangen und korrigiert) + +### Phase 2 — Frontend-Dialog ✅ (38df597, deployed 21:34) + +- `ImportExportDialog.tsx` (neu): Modal lg/xl, Export-Tab (1 Schritt) + Import-Tab (4 Schritte: Datei → Mapping-Editor → Dry-Run → Ausführung+Report inkl. Background-Job-Polling) +- 24 `importexport.*`-i18n-Keys (de + en, keine hardcoded Strings) +- ContactsList: Toolbar-Button (contacts:read-Gate, Upload-Icon, entityType vorgewählt) über pluginToolbarStore +- **Verifikation: Vitest 12/12** (importExportDialog 6/6 + routePermissions 6/6) · tsc exit 0 · Production-Build exit 0 · 6 contacts/shell-Failures per Stash-Test als Vorbestand bewiesen (identisch auf clean HEAD) · frontend-only Deploy FE_EXIT=0 + +### Phase 3 — PDF (separat, offen) + +PDF als weiteres Format-Plugin — eigener Design-Baustein (Library-Choice, Templates pro Modul). ## Welle 3a — Route-Permission-Wahrheit (2026-08-27)