# 2026-05-12

## Co zrobiono

- [Phase 121, Plan 01] Wdrożono dwukierunkową komunikację SMSPLANET: sender mode, webhook inbound, zakładkę SMS w zamówieniu oraz centrum powiadomień.
- [Phase 121, Plan 01] Poprawiono migrację po realnym błędzie FK: `orders.id` na bazie ma typ `BIGINT UNSIGNED`, więc referencje SMS/notifications używają tego samego typu.
- [Phase 121, Plan 01] Zamknięto UNIFY; manualne smoke testy SMSPLANET/browser notifications i SonarQube pozostają zależne od środowiska.

## Zmienione pliki

- `database/migrations/20260512_000110_smsplanet_conversation_notifications.sql`
- `src/Modules/Sms/SmsMessageRepository.php`
- `src/Modules/Sms/SmsConversationService.php`
- `src/Modules/Sms/SmsplanetWebhookController.php`
- `src/Modules/Notifications/NotificationRepository.php`
- `src/Modules/Notifications/NotificationController.php`
- `src/Modules/Notifications/NotificationApiController.php`
- `src/Modules/Settings/SmsplanetIntegrationRepository.php`
- `src/Modules/Settings/SmsplanetIntegrationController.php`
- `src/Modules/Orders/OrdersController.php`
- `routes/web.php`
- `resources/views/settings/smsplanet.php`
- `resources/views/orders/show.php`
- `resources/views/notifications/index.php`
- `resources/views/layouts/app.php`
- `resources/lang/pl.php`
- `resources/scss/app.scss`
- `public/assets/css/app.css`
- `public/assets/js/modules/notifications.js`
- `DOCS/DB_SCHEMA.md`
- `DOCS/ARCHITECTURE.md`
- `DOCS/TECH_CHANGELOG.md`
- [Phase 122, Plan 01] Dodano konfigurowalny domyślny stopkę SMS w SMSPLANET — kolumna `default_footer` w `smsplanet_integration_settings`, doklejanie do test SMS i wiadomości z zamówienia, walidacja 918 znaków, UI textarea i podgląd w zamówieniu.
- [Phase 122, Plan 01] Zamknięto UNIFY; manualne smoke testy (test SMS i SMS z zamówienia z/bez stopki, over-limit) oraz SonarQube zależne od środowiska.

## Zmienione pliki (Phase 122)

- `database/migrations/20260512_000111_smsplanet_default_footer.sql`
- `src/Modules/Settings/SmsplanetIntegrationRepository.php`
- `src/Modules/Settings/SmsplanetIntegrationController.php`
- `src/Modules/Sms/SmsConversationService.php`
- `src/Modules/Orders/OrdersController.php`
- `resources/views/settings/smsplanet.php`
- `resources/views/orders/show.php`
- `resources/lang/pl.php`
- `resources/scss/app.scss`
- `public/assets/css/app.css`
- `DOCS/DB_SCHEMA.md`
- `DOCS/ARCHITECTURE.md`
- `DOCS/TECH_CHANGELOG.md`

## Phase 123 — Receipts Export VAT Breakdown

- [Phase 123, Plan 01] Eksport XLSX paragonów (`/accounting`): nowe nagłówki `Numer | Data wystawienia | Kwota brutto | Kwota netto | Stawka VAT | Kwota VAT` (usunięto Data sprzedaży/Konfiguracja/Nr zamówienia/Nr referencyjny).
- [Phase 123, Plan 01] Multi-rate breakdown: paragon z kilkoma stawkami VAT generuje osobny wiersz na każdą stawkę (ten sam Numer/Data/Brutto).
- [Phase 123, Plan 01] `ReceiptService::buildItemsSnapshot()` zapisuje `vat` per pozycja w `items_json` (z `order_items.tax_rate`, fallback 23.0; "Koszt wysylki" = 23.0).
- [Phase 123, Plan 01] Auto-fix po smoke teście: legacy fallback liczy `net = brutto/1.23` zamiast brać z `total_net` (RECEIPT-NET-FIX odłożone do `.paul/codebase/todo.md`).

### Zmienione pliki (Phase 123)

- `src/Modules/Accounting/ReceiptService.php`
- `src/Modules/Accounting/AccountingController.php`
- `.paul/codebase/architecture.md`
- `.paul/codebase/tech_changelog.md`
- `.paul/codebase/todo.md`
