--- phase: 62-import-reimport-safety plan: 01 subsystem: api tags: [import, activity-log, deduplication, data-protection] requires: - phase: 56-order-payments provides: ręczne płatności w orderPRO które mogą być nadpisane provides: - rozróżnienie import vs aktualizacja w activity log shopPRO - deduplikacja wpisów activity log shopPRO (shouldSkipDuplicateImportActivity) - ochrona lokalnych płatności, przesyłek i historii statusów przed nadpisaniem przy re-imporcie affects: [] tech-stack: added: [] patterns: - "replacePayments/Shipments/StatusHistory tylko przy INSERT (nie UPDATE) w upsertOrderAggregate" key-files: created: [] modified: - src/Modules/Settings/ShopproOrdersSyncService.php - src/Modules/Orders/OrderImportRepository.php key-decisions: - "Adresy, pozycje i notatki nadpisywane zawsze (dane ze źródła); płatności, przesyłki i historia statusów tylko przy pierwszym imporcie" - "Reuse shouldSkipDuplicateImportActivity z Allegro zamiast nowej logiki" patterns-established: - "Przy re-imporcie chronić dane które mogą pochodzić z lokalnych akcji użytkownika" duration: 3min started: 2026-03-31 completed: 2026-03-31 --- # Phase 62 Plan 01: Import Re-import Safety Summary **Rozróżnienie import/aktualizacja w activity log shopPRO + ochrona lokalnych danych (płatności, przesyłki, historia statusów) przed nadpisaniem przy re-imporcie dla obu źródeł.** ## Performance | Metric | Value | |--------|-------| | Duration | ~3min | | Started | 2026-03-31 | | Completed | 2026-03-31 | | Tasks | 2 completed | | Files modified | 2 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: shopPRO rozróżnia import od aktualizacji | Pass | "Import zamowienia z shopPRO" vs "Zaktualizowano zamowienie z shopPRO (re-import)" | | AC-2: shopPRO deduplikuje identyczne wpisy | Pass | shouldSkipDuplicateImportActivity reuse z Allegro | | AC-3: Re-import nie kasuje lokalnych płatności | Pass | replacePayments tylko przy $created | | AC-4: Re-import nie kasuje lokalnej historii statusów | Pass | replaceStatusHistory tylko przy $created | | AC-5: Re-import nie kasuje lokalnych przesyłek | Pass | replaceShipments tylko przy $created | ## Accomplishments - shopPRO activity log rozróżnia pierwszy import od re-importu (analogicznie do Allegro) - Deduplikacja wpisów activity log eliminuje powtórzenia przy tym samym source_updated_at - Re-import (UPDATE) nie kasuje już płatności, przesyłek ani historii statusów — chroni dane dodane lokalnie w orderPRO - Zmiana w OrderImportRepository dotyczy obu źródeł (shopPRO i Allegro) ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `src/Modules/Settings/ShopproOrdersSyncService.php` | Modified | Rozróżnienie summary import/aktualizacja, dodanie pól deduplikacji, warunek shouldSkipDuplicate | | `src/Modules/Orders/OrderImportRepository.php` | Modified | replacePayments/Shipments/StatusHistory przeniesione do bloku if ($created) | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Adresy/pozycje/notatki nadpisywane zawsze | Dane pochodzą wyłącznie ze źródła, nie są edytowane lokalnie | Źródło pozostaje autorytatywne dla tych danych | | Płatności/przesyłki/historia tylko przy INSERT | Mogą być dodawane lokalnie w orderPRO (ręczna płatność, zmiana statusu) | Lokalne dane chronione przed kaskadowym DELETE | ## Deviations from Plan None - plan executed exactly as written ## Issues Encountered None ## Next Phase Readiness **Ready:** - Import bezpieczny dla danych lokalnych - Activity log spójny między Allegro i shopPRO **Concerns:** - Brak kolumny `origin` (source/local) na tabelach relacyjnych — przy przyszłej potrzebie merge/diff danych z obu źródeł trzeba będzie dodać **Blockers:** - None --- *Phase: 62-import-reimport-safety, Plan: 01* *Completed: 2026-03-31*