--- phase: 77-cod-amount-fix plan: 01 subsystem: shipments tags: [cod, payment, stringhelper, shoppro] requires: - phase: none provides: n/a provides: - StringHelper::isCodPayment() — centralna detekcja platnosci COD - Normalizacja COD w ShopproOrderMapper przy imporcie affects: [] tech-stack: added: [] patterns: [keyword-based COD detection via StringHelper] key-files: created: [] modified: - src/Core/Support/StringHelper.php - src/Modules/Settings/ShopproOrderMapper.php - resources/views/shipments/prepare.php - resources/views/orders/show.php - src/Modules/Orders/OrdersController.php key-decisions: - "Keyword matching zamiast exact match — shopPRO wysyla pelne polskie nazwy metod platnosci" - "Dwupoziomowa detekcja: exact match (COD_PAYMENT_TYPES) + keyword search (COD_PAYMENT_KEYWORDS)" patterns-established: - "StringHelper::isCodPayment() jako jedyne miejsce detekcji COD w codebase" duration: 15min started: 2026-04-07T00:00:00Z completed: 2026-04-07T00:15:00Z --- # Phase 77 Plan 01: COD Amount Fix Summary **Centralna detekcja platnosci COD (StringHelper::isCodPayment) z keyword matching dla shopPRO wartosci typu "Platnosc przy odbiorze"** ## Performance | Metric | Value | |--------|-------| | Duration | ~15min | | Started | 2026-04-07 | | Completed | 2026-04-07 | | Tasks | 2 completed | | Files modified | 5 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: COD auto-fill dla zamowien shopPRO | Pass | Testowane na zamowieniach 188/207 z wartoscia "Platnosc przy odbiorze" | | AC-2: COD auto-fill dla zamowien Allegro (regresja) | Pass | CASH_ON_DELIVERY nadal rozpoznawane przez exact match | | AC-3: Detekcja COD w widoku szczegulow zamowienia | Pass | Badge "Za pobraniem" wyswietla sie dla wszystkich wariantow COD | ## Accomplishments - Centralna metoda `StringHelper::isCodPayment()` z dwupoziomowa detekcja: exact match na 4 warianty + keyword match na 3 frazy (PRZY ODBIORZE, POBRANIEM, POBRANIE) - Normalizacja COD na `CASH_ON_DELIVERY` w `ShopproOrderMapper` przy nowych importach - Eliminacja wszystkich hardcoded `=== 'CASH_ON_DELIVERY'` z kodu produkcyjnego (3 pliki) - Rozszerzenie map etykiet platnosci w `show.php` o warianty COD ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `src/Core/Support/StringHelper.php` | Modified | Dodano COD_PAYMENT_TYPES, COD_PAYMENT_KEYWORDS, isCodPayment() | | `src/Modules/Settings/ShopproOrderMapper.php` | Modified | normalizeCodPaymentType() + uzycie w mapOrderAggregate | | `resources/views/shipments/prepare.php` | Modified | Zamiana hardcoded na StringHelper::isCodPayment() | | `resources/views/orders/show.php` | Modified | Zamiana 2 sprawdzen + rozszerzenie map etykiet o warianty COD | | `src/Modules/Orders/OrdersController.php` | Modified | Zamiana hardcoded na StringHelper::isCodPayment() | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Keyword matching zamiast samego exact match | shopPRO wysyla pelne polskie nazwy np. "Platnosc przy odbiorze" — nie da sie przewidziec wszystkich wariantow | Odpornosc na nowe warianty nazw COD | | Dwupoziomowa detekcja (exact + keyword) | Exact match jest szybszy i pewniejszy dla znanych wartosci, keyword jako fallback | Brak false positives dla ONLINE/TRANSFER, elastycznosc dla COD | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | Auto-fixed | 1 | Kluczowe — bez tego fix nie dzialal | | Scope additions | 0 | - | | Deferred | 0 | - | **Total impact:** Konieczne rozszerzenie — plan zakladal 4 warianty exact match, rzeczywistosc wymagala keyword matching. ### Auto-fixed Issues **1. Wartosc shopPRO to "Platnosc przy odbiorze" — nie ma w liscie exact match** - **Found during:** Weryfikacja po APPLY (user report) - **Issue:** Plan zakladal warianty "cod", "pobranie", "za pobraniem". Rzeczywista wartosc w DB to "Platnosc przy odbiorze" - **Fix:** Dodano COD_PAYMENT_KEYWORDS z keyword matching (str_contains) jako drugi poziom detekcji - **Files:** src/Core/Support/StringHelper.php, resources/views/orders/show.php - **Verification:** 9/9 unit testow przeszlo, w tym "Platnosc przy odbiorze" => true ## Issues Encountered | Issue | Resolution | |-------|------------| | Poczatkowy fix nie dzialal — shopPRO wysyla "Platnosc przy odbiorze" nie "cod" | Sprawdzenie DB (orders WHERE id IN (188,207)), dodanie keyword matching | ## Next Phase Readiness **Ready:** - StringHelper::isCodPayment() gotowy do uzycia w kolejnych miejscach - Nowe importy shopPRO beda mialy znormalizowane CASH_ON_DELIVERY **Concerns:** - Istniejace zamowienia w DB zachowuja oryginalna wartosc "Platnosc przy odbiorze" — helper obsluguje je w runtime, ale dane nie sa znormalizowane **Blockers:** - None --- *Phase: 77-cod-amount-fix, Plan: 01* *Completed: 2026-04-07*