# 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 `<tr>` 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), `<details>` 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`
