# 2026-04-22 ## Co zrobiono - [Phase 106, Plan 01] Customer Return Shipment Alert — widoczny alert o kliencie z historia zwrotow przesylek na liscie zamowien i w szczegolach - Task 1: Backend query — correlated subquery `customer_returned_count` w `OrdersRepository` (buildListSql + findDetails), nowa metoda `ShipmentPackageRepository::findReturnedByCustomer` z matchingiem OR (email lower+trim / phone tylko cyfry >=6 / name lower+trim) i self-exclusion - Task 2: View list — badge `zwroty: N` w kolumnie buyer (przy imieniu klienta) + klasa `is-risk-return` na `` w kompozycji z aged-rows (Phase 101) - Task 3: View detail + SCSS + DOCS — czerwony banner `customer-risk-banner` u samej gory karty szczegolow zamowienia (po feedback'u uzytkownika przeniesiony z sekcji adresow), `
` z tabela zwroconych zamowien, nowy modul SCSS, rebuild CSS, update `.paul/docs/ARCHITECTURE.md` i `.paul/docs/TECH_CHANGELOG.md` - Deviation: banner przeniesiony mid-apply zgodnie z instrukcja uzytkownika ("na samej gorze prawie") - Deferred: indeksy DB `order_addresses(order_id, address_type)` i `shipment_packages(order_id, delivery_status)` dla perf na duzych datasetach - Skill gap: sonar-scanner nie uruchomiony (analogicznie do Phase 105) - Wymaganie: MySQL 8.0+ (REGEXP_REPLACE) ## Zmienione pliki - `src/Modules/Orders/OrdersRepository.php` - `src/Modules/Orders/OrdersController.php` - `src/Modules/Shipments/ShipmentPackageRepository.php` - `resources/views/orders/show.php` - `resources/scss/app.scss` - `resources/scss/modules/_customer-risk-alert.scss` - `public/assets/css/app.css` - `.paul/docs/ARCHITECTURE.md` - `.paul/docs/TECH_CHANGELOG.md` - `.paul/STATE.md` - `.paul/ROADMAP.md` - `.paul/phases/106-customer-return-alert/106-01-PLAN.md` - `.paul/phases/106-customer-return-alert/106-01-SUMMARY.md`