7.9 KiB
Project State
Project Reference
See: .paul/PROJECT.md (updated 2026-05-07)
Core value: Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami. Current focus: v3.7 Invoices + operational integrations - Phase 130 polkurier delivery status mappings UI loop closed, transition pending (git commit + PROJECT/ROADMAP update).
Current Position
Milestone: v3.7 Invoices (Fakturownia integration) - In progress Phase: 130 of TBD (polkurier delivery status mappings UI) - Complete Plan: 130-01 complete (SUMMARY.md created) Status: UNIFY complete, transition pending (git commit + Decisions w PROJECT.md + ROADMAP status) Last activity: 2026-05-14 - Phase 130-01 UNIFY zakonczony, SUMMARY + tech_changelog + changelog utworzone
Progress:
- Milestone v3.7: [##########] ~99% (Phase 113-130 complete; transition pending)
- Phase 130: [##########] 100%
Loop Position
Current loop state:
PLAN -> APPLY -> UNIFY
done done done [Loop complete - transition pending]
Session Continuity
Last session: 2026-05-14
Stopped at: Phase 130-01 UNIFY closed; SUMMARY.md created
Next action: Phase transition (git commit feat(130): polkurier delivery status mappings UI + Decisions w PROJECT.md + ROADMAP status update), potem wybor kolejnego kandydata v3.7
Resume file: .paul/phases/130-polkurier-delivery-status-mappings/130-01-SUMMARY.md
Pending parallel work
Git State
Last phase commit: 27df08e feat(130): polkurier delivery status mappings UI
Previous: 48351b5 feat(129): order user notes module
Branch: main (9 commits ahead of origin/main)
Pending Actions
- Manualne testy AC-1..AC-7 dla Phase 112 na zywej bazie (XAMPP online).
- Backfill zamowienia #882 - operator robi recznie po wdrozeniu (poza zakresem planu).
- Uruchom migracje gdy XAMPP online:
php bin/migrate.php(delivery_statuses). - Recznie odtworzyc istniejace reguly automatyzacji z grupowymi kluczami (BREAKING z 108-02).
- HostedSMS inbound replies: requires DCS/HostedSMS activation before implementation.
- Phase 117 follow-up: run migration when XAMPP MySQL is online and manually test real SMSPLANET sends for Bearer token and key + password.
- Phase 119 follow-up:
composer install+vendor/bin/phpunit tests/Unit/OrderImportRepositoryTest.phpto run the 3 new tests; manual smoke test re-syncing order #976 from shoppro to confirmtotal_paid=91.00persists across re-import. - Phase 121 follow-up: manually verify SMSPLANET settings/test send, inbound webhook insertion, order SMS tab, and notification polling/browser notification.
- Phase 121 transition note: git commit was not created during UNIFY because the worktree contains unrelated Phase 118/local dirty files; prepare a scoped commit manually.
- Phase 122 follow-up: manually verify settings save/reload and real SMSPLANET test/order sends with non-empty and empty footer; manually trigger over-limit final body rejection in UI.
- Phase 123 follow-up: wystaw nowy paragon i potwierdz
items_jsonzawieravatper pozycja; eksport XLSX z paragonem multi-rate (np. mix 23% + 8%) — sprawdz osobne wiersze; eksport "wybrane paragony" zachowuje breakdown. - Phase 123 deferred: RECEIPT-NET-FIX (
ReceiptService::issue()zapisujetotal_net=total_gross) — udokumentowane w.paul/codebase/todo.md. - Phase 124 follow-up:
php bin/migrate.php(XAMPP MySQL online) — utworzysms_templates. Operator nastepnie tworzy szablony manualnie z/settings/sms-templates. - Phase 124 follow-up: real smoke wysylki SMS z szablonu (zamowienie z paczka + skonfigurowana stopka SMSPLANET) — sprawdzic ze
sms_messages.bodyma stopke raz, finalna tresc <= 918 znakow. - Phase 124 follow-up: regresja Email — wyslij e-mail z istniejacym szablonem aby potwierdzic ze refaktor
Email\VariableResolverna fasade nie zlamalEmailSendingService. - Phase 125 follow-up: uruchom
php bin/migrate.php(XAMPP MySQL online) — backfill 7 zamowien + DROP COLUMNorders.is_invoice. Weryfikacja:SELECT id, invoice_requested FROM orders WHERE id=1089;->1;SHOW COLUMNS FROM orders LIKE 'is_invoice';-> empty. - Phase 125 follow-up: ponowne uruchomienie migracji powinno byc no-op (
ALTER TABLE orders COMMENT = 'phase-125 backfill no-op'). - Phase 125 follow-up: zaimportuj nowe zamowienie shopPRO z
firm_nip(bez kluczy w 5-elementowej liscie wczesniejszej heurystyki) -> potwierdz ze UI w zakladce Platnosci pokazuje zaznaczony checkbox „Klient prosi o fakture" i widoczny przycisk „Wystaw fakture". - Phase 121 transition note (rozwiązane): commit
360eef1obejmuje Phase 121 i Phase 122 razem; per-faza hunk-split nie wykonany ze względu na nakładkowe modyfikacje plików. - Phase 126 follow-up: manual smoke
/orders/1090/invoice/create(JDG, NIP 5170167517) -> "Imie i nazwisko"="JACEK PYZIAK", "Nazwa firmy"="Project-Pro Pyziak Jacek" niezmieniona; drugi smoke na zamowieniu spolki z aktywnym KRS;curl /api/nip/lookup?nip=5170167517->data.is_jdg=true. - Phase 127 follow-up: zaplanowac kolejna faze polkurier —
PolkurierShipmentService(CreateOrder + GetLabel + OrderValuationV2 + AvailableCarriers mapping + UI mapowan metod dostawy + presety przesylek) — fundament + zweryfikowany kontrakt API gotowy. - Phase 127 follow-up: drugi krok —
PolkurierTrackingService+ wpisy wdelivery_status_mappings(provider='polkurier'). - Phase 127 follow-up: po polkurier shipment service rozwazyc fazy paczkomaty (
InpostParcelMachines/PocztexPostOffices/Kurier48PostOfficesAPI juz dostepne w SDK polkuriera). - Phase 128 follow-up: uruchom migracje gdy XAMPP MySQL online:
php bin/migrate.php(seed 7 wpisowprovider='polkurier'wdelivery_status_mappings). - Phase 128 follow-up: weryfikacja crona
shipment_tracking_syncprzy pierwszej zywej paczce polkurier win_transit— sprawdz zeshipment_packages.delivery_statusaktualizuje sie zD/WP/ZprzezDeliveryStatus::normalizeWithOverrides('polkurier', ...). - Phase 128 follow-up: rozmiar etykiety A4 vs A6 sterowany jest w panelu klienta polkurier.pl (Ustawienia konta → Preferencje etykiet), NIE przez API — operator ustawil A6.
- Phase 129 follow-up: uruchom migracje gdy XAMPP MySQL online:
php bin/migrate.php(utworzyorder_notes.user_id+author_name+ FK + indeksidx_order_notes_type_order). - Phase 129 follow-up: manualny smoke —
/orders/{X}→ sekcja "Notatki" widoczna, dodanie notatki tworzy wiersz + wpis worder_activity_log. Drugi user (session.user_id != note.user_id) nie widzi przycisków Edytuj/Usuń; POST/notes/{noteId}/deletejako inny user → 403 flash. - Phase 129 follow-up:
/orders/list→ badge[N]widoczny przy zamówieniach z notatkami autorskimi; klik scrolluje do#notesw szczegółach. Sprawdzić że badge zwrotów (Phase 106) działa równolegle. - Phase 130 follow-up: manualny smoke
/settings/delivery-statuses?tab=mapping→ dropdown ma 4 pozycje;?provider=polkurier→ 7 wierszy (O/P/A/WP/D/Z/W) zis_custom=false. Override (zapis nowego mapowania) → wiersz przechodzi wis_custom=true. - Phase 130 follow-up: migracja Phase 128 (
20260514_000115_seed_polkurier_delivery_status_mappings.sql) staje się no-op — można ją uruchomić lub pominąć, defaulty z kodu pokryją tę samą wartość.
Deferred to Next Milestones
- Phase 68 - Code Deduplication Refactor (0/2 Planning, nigdy nie rozpoczety).
- STAT-NET - netto shopPRO z API lub z
order_items.tax_rate(.paul/TODO.md). - Mobile Orders List / Mobile Order Details / Mobile Settings.
- INDEX-106-01 - indeksy DB dla query
customer_returned_count:order_addresses(order_id, address_type),shipment_packages(order_id, delivery_status)(gdy dataset >50k wierszy).
Skill Requirements
sonar-scannerrequired after APPLY; Phase 116, Phase 117, Phase 121 and Phase 122 gaps documented because CLI was not available in PATH.