---
phase: 47-shipment-created-automation
plan: 01
type: execute
wave: 1
depends_on: []
files_modified:
- src/Modules/Automation/AutomationController.php
- src/Modules/Automation/AutomationService.php
- src/Modules/Cron/CronHandlerFactory.php
- src/Modules/Shipments/ShipmentController.php
- src/Modules/Shipments/ShipmentPackageRepository.php
- resources/views/automation/form.php
- public/assets/js/modules/automation-form.js
- resources/views/automation/index.php
- DOCS/ARCHITECTURE.md
- DOCS/TECH_CHANGELOG.md
- DOCS/todo.md
autonomous: false
---
## Goal
Dodac nowe zdarzenie automatyzacji `shipment.created`, ktore uruchamia sie od razu po utworzeniu przesylki w zamowieniu, oraz dodac nowa akcje automatyzacji `update_shipment_status` (UI: "Zmiana statusu przesylki").
## Purpose
Operator ma moc budowania automatyzacji natychmiast po wygenerowaniu przesylki (bez czekania na cron tracking) i moze reakcja reguly zmieniac status przesylki zgodnie z procesem operacyjnym firmy.
## Output
Kompletne rozszerzenie automatyzacji o:
- event `shipment.created` (natychmiastowy trigger),
- action `update_shipment_status`,
- konfiguracje w formularzu automatyzacji,
- aktualna dokumentacje techniczna.
## Project Context
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md
@DOCS/ARCHITECTURE.md
@DOCS/DB_SCHEMA.md
@DOCS/todo.md
## Prior Work (only if genuinely needed)
@.paul/phases/42-automation-shipment-status-event/42-01-PLAN.md
@.paul/phases/42-automation-shipment-status-event/42-01-SUMMARY.md
@.paul/phases/26-manual-tracking-number/26-01-SUMMARY.md
@.paul/phases/27-shipment-tracking-backend/27-01-SUMMARY.md
## Source Files
@src/Modules/Shipments/ShipmentController.php
@src/Modules/Shipments/ShipmentPackageRepository.php
@src/Modules/Automation/AutomationController.php
@src/Modules/Automation/AutomationService.php
@src/Modules/Cron/CronHandlerFactory.php
@resources/views/automation/form.php
@public/assets/js/modules/automation-form.js
@resources/views/automation/index.php
## Required Skills (from SPECIAL-FLOWS.md)
| Skill | Priority | When to Invoke | Loaded? |
|-------|----------|----------------|---------|
| `sonar-scanner` | required | Po APPLY, przed UNIFY | o |
| /feature-dev | optional | Przed wdrazaniem nowej funkcjonalnosci | o |
| /code-review | optional | Po APPLY, przed UNIFY | o |
**BLOCKING:** Required skills MUST be loaded before APPLY proceeds.
## Skill Invocation Checklist
- [ ] `sonar-scanner` uruchomiony po APPLY
- [ ] /feature-dev (opcjonalnie)
- [ ] /code-review (opcjonalnie)
## AC-1: Event "Utworzenie przesylki" uruchamia sie natychmiast po sukcesie utworzenia
```gherkin
Given istnieje aktywna regula automatyzacji z eventem `shipment.created`
When uzytkownik utworzy przesylke dla zamowienia (provider API lub recznie)
Then system wywola AutomationService trigger w tym samym flow requestu
And nie wymaga to oczekiwania na cron `shipment_tracking_sync`
```
## AC-2: Nowa akcja "Zmiana statusu przesylki" jest konfigurowalna i walidowana
```gherkin
Given uzytkownik tworzy/edytuje regule automatyzacji
When dodaje akcje "Zmiana statusu przesylki"
Then moze wskazac docelowy status przesylki z dozwolonej listy
And zapis nie przechodzi dla nieprawidlowej konfiguracji akcji
```
## AC-3: Akcja poprawnie aktualizuje status przesylki i nie powoduje petli
```gherkin
Given regula uruchamia akcje `update_shipment_status`
When akcja jest wykonana dla zamowienia z paczka
Then status paczki zostaje zaktualizowany tylko przy realnej zmianie
And system nie wchodzi w nieskonczone petle triggerow automatyzacji
```
## AC-4: UI i dokumentacja sa spójne z nowymi elementami automatyzacji
```gherkin
Given wdrozenie nowego eventu i akcji
When uzytkownik otworzy formularz automatyzacji
Then widzi event "Utworzenie przesylki" i akcje "Zmiana statusu przesylki"
And ARCHITECTURE/TECH_CHANGELOG/todo opisuja zakres i ograniczenia implementacji
```
Task 1: Dodaj event `shipment.created` i natychmiastowy trigger po utworzeniu przesylki
src/Modules/Automation/AutomationController.php, src/Modules/Shipments/ShipmentController.php, src/Modules/Automation/AutomationService.php
Rozszerz ALLOWED_EVENTS i etykiety UI o `shipment.created` ("Utworzenie przesylki").
W `ShipmentController::create()` i `ShipmentController::createManual()` po potwierdzonym utworzeniu paczki wywolaj `AutomationService->trigger('shipment.created', orderId, context)`.
Context powinien zawierac co najmniej: package_id, provider, tracking_number (jezeli dostepny), package_status.
Unikaj triggera w sciezkach bledu tworzenia przesylki.
rg -n "shipment\.created|trigger\('shipment\.created'|Utworzenie przesylki" src/Modules/Automation src/Modules/Shipments resources/views/automation
AC-1 satisfied: event jest dostepny i odpalany od razu po utworzeniu przesylki.
Task 2: Dodaj akcje `update_shipment_status` i wykonanie backend
src/Modules/Automation/AutomationController.php, src/Modules/Automation/AutomationService.php, src/Modules/Shipments/ShipmentPackageRepository.php, src/Modules/Cron/CronHandlerFactory.php
Dodaj nowy typ akcji do walidacji i parsera konfiguracji: `update_shipment_status`.
Konfiguracja akcji: docelowy status dostawy (`delivery_status`) z tej samej mapy statusow biznesowych co warunki shipment_status.
W `AutomationService` dodaj handler akcji, ktory wyszukuje docelowa paczke (z context package_id lub fallback: najnowsza aktywna paczka zamowienia) i wykonuje aktualizacje statusu tylko przy realnej zmianie.
Dodaj zabezpieczenie anty-petla: nie emituj kolejnego eventu przy braku zmiany; przy zmianie oznacz context zrodla automatyzacji i respektuj chain dedup.
Zaktualizuj factory DI, by serwis automatyzacji mial dostep do repo paczek.
rg -n "update_shipment_status|handleUpdateShipmentStatus|delivery_status|ALLOWED_ACTION_TYPES" src/Modules/Automation src/Modules/Shipments src/Modules/Cron
AC-2 satisfied i AC-3 satisfied: akcja jest walidowana, wykonuje realna zmiane i nie petli sie.
Task 3: Rozszerz formularz automatyzacji oraz dokumentacje techniczna
resources/views/automation/form.php, public/assets/js/modules/automation-form.js, resources/views/automation/index.php, DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md, DOCS/todo.md
Dodaj opcje akcji "Zmiana statusu przesylki" do formularza oraz dynamiczny config (wybor statusu).
Zapewnij zgodnosc renderu create/edit i JS add-row.
Zaktualizuj dokumentacje: nowy event natychmiastowy i nowa akcja, z opisem kontekstu oraz ograniczen.
Dodaj/uzupelnij wpis w `DOCS/todo.md` dla nowego zakresu (zamkniecie po wdrozeniu).
rg -n "shipment\.created|Zmiana statusu przesylki|update_shipment_status" resources/views/automation public/assets/js/modules/automation-form.js DOCS/ARCHITECTURE.md DOCS/TECH_CHANGELOG.md DOCS/todo.md
AC-4 satisfied: UI i dokumentacja sa spójne z wdrozonym zakresem.
Nowy natychmiastowy event `shipment.created` oraz nowa akcja automatyzacji `update_shipment_status`.
1. Otworz: Ustawienia > Zadania automatyczne > Dodaj zadanie.
2. Sprawdz event "Utworzenie przesylki" i akcje "Zmiana statusu przesylki".
3. Utworz regule: event `shipment.created`, warunek integracji, akcja zmiany statusu przesylki.
4. Utworz przesylke z poziomu zamowienia i potwierdz, ze regula wykonala sie od razu (bez cron).
5. Potwierdz, ze ponowne odpalenie bez realnej zmiany statusu nie generuje petli.
Type "approved" to continue, or describe issues to fix
## DO NOT CHANGE
- `database/migrations/*` (brak zmian schematu w tej fazie)
- Logika eventu `receipt.created` i istniejace akcje poza wymaganym rozszerzeniem
- Moduly niezwiazane z automatyzacja i przesylkami
## SCOPE LIMITS
- Tylko nowe zdarzenie i nowa akcja w module automatyzacji.
- Bez przebudowy calego silnika cron/tracking.
- Bez zmian UX poza formularzem i listowaniem automatyzacji.
Before declaring plan complete:
- [ ] `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationController.php`
- [ ] `C:\xampp\php\php.exe -l src/Modules/Automation/AutomationService.php`
- [ ] `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentController.php`
- [ ] `C:\xampp\php\php.exe -l src/Modules/Shipments/ShipmentPackageRepository.php`
- [ ] `C:\xampp\php\php.exe -l src/Modules/Cron/CronHandlerFactory.php`
- [ ] `C:\xampp\php\php.exe -l resources/views/automation/form.php`
- [ ] `C:\xampp\php\php.exe -l resources/views/automation/index.php`
- [ ] Manual checkpoint wykonany (event dziala od razu + akcja statusu)
- [ ] Dokumentacja zaktualizowana (`DOCS/ARCHITECTURE.md`, `DOCS/TECH_CHANGELOG.md`, `DOCS/todo.md`)
- [ ] All acceptance criteria met
- Event `shipment.created` uruchamia automatyzacje natychmiast po utworzeniu przesylki.
- Akcja `update_shipment_status` jest dostepna, walidowana i dziala przewidywalnie.
- Brak petli automatyzacji przy ponownych wywolaniach bez zmiany statusu.
- Dokumentacja techniczna odzwierciedla nowy kontrakt event/action.