Implement bidirectional status sync for shopPRO integrations. When direction is set to orderpro_to_shoppro, cron pushes manual status changes to shopPRO via PUT API with reverse status mapping. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
29 KiB
29 KiB
DB Schema
Compensating Migrations
Migracje z prefiksem ensure_ to migracje kompensujące — zostały dodane
2026-03-08 aby naprawić rozbieżności schematu między środowiskami.
Środowisko jest zsynchronizowane od 2026-03-08. Migracje są idempotentne.
| Plik migracji | Kompensuje | Powód |
|---|---|---|
| 000038_ensure_order_status_mappings_table | 000020_create_order_status_mappings_table | Tabela nie dotarła do środowiska produkcyjnego |
| 000039_ensure_integrations_fetch_columns | 000017_add_shoppro_orders_fetch_settings | ALTER TABLE w 000017 nie-idempotentny; kolumny już istniały |
| 000040_ensure_shoppro_orders_import_schedule | 000018_create_orders_tables_and_schedule (cron seed) | Koryguje interval z 60s na 300s; używa IFNULL zamiast nadpisywania |
| 000041_ensure_shoppro_status_sync_schedule_and_direction | 000021_add_order_status_sync_direction_and_schedule | ALTER TABLE nie-idempotentny; koryguje interval z 3600s na 900s |
| 000042_ensure_shoppro_payment_sync_schedule_and_columns | brak (pierwsza migracja payment sync) | Prefiks ensure_ użyty defensywnie — brak wcześniejszej migracji dla payment sync |
Status
- Projekt po resecie do trybu
users-only. - Aktualizuj ten plik przy kazdej zmianie migracji/schematu.
- 2026-03-02: Przywrocenie UI
Ustawienia > Baza danychnie wprowadza zmian w schemacie. - 2026-03-02: Dodano tabele statusow (grupy + statusy) dla nowej zakladki
Ustawienia > Statusy. - 2026-03-02: Przygotowano draft generycznego schematu zamowien (bez aktywnej migracji) w
database/drafts/20260302_orders_schema_v1.sql. - 2026-03-03: Wdrozono generyczne tabele zamowien na bazie docelowej skryptem
bin/deploy_and_seed_orders.php(bez migratora SQL). - 2026-03-03: Dodano UI
Zamowienia > Lista zamowien- bez zmian schematu (wykorzystuje istniejace tabele domeny zamowien). - 2026-03-03: Dodano UI
Zamowienia > Szczegoly zamowienia(GET /orders/{id}) - bez zmian schematu. - 2026-03-04: Dodano tabele
allegro_integration_settingspod konfiguracje OAuth2 Allegro i tokeny dostepowe. - 2026-03-04: Dodano harmonogram crona
allegro_token_refresh(co 3600s, priorytet 10, max 3 proby). - 2026-03-04: Dodano reczny import pojedynczego zamowienia Allegro - bez zmian schematu (wykorzystuje istniejace tabele domeny zamowien).
- 2026-03-04: Dodano tabele
allegro_order_status_mappingsdo mapowania statusow Allegro na statusy orderPRO. - 2026-03-04: Zmieniono
allegro_order_status_mappings.orderpro_status_codena nullable, aby zapisac statusy pobrane z Allegro przed przypisaniem mapowania. - 2026-03-04: Dodano rozwiazywanie miniatur pozycji zamowien z mapowania produktu orderPRO (
product_channel_map+product_images) - bez zmian schematu. - 2026-03-04: Dodano diagnostyke importu miniatur Allegro (alerty przyczyn brakow) - bez zmian schematu.
- 2026-03-04: Dodano harmonogram
allegro_orders_import(auto-import zamowien Allegro) oraz rozszerzonointegration_order_sync_stateo kolumny kursora sync (last_synced_order_updated_at,last_synced_source_order_id,last_success_at) - migracja20260304_000027_add_allegro_orders_import_schedule.sql. - 2026-03-04: Dodano zakladke
Ustawieniaw integracji Allegro z konfiguracja interwalu importu zamowien; zapis aktualizuje istniejacy rekordcron_schedules(job_type=allegro_orders_import) - bez zmian schematu. - 2026-03-04: Rozszerzono zakladke
Ustawieniaintegracji Allegro o kierunek synchronizacji statusow i interwal synchronizacji statusow; zapis doapp_settings(allegro_status_sync_direction,allegro_status_sync_interval_minutes) - bez zmian schematu. - 2026-03-04: Dodano harmonogram
allegro_status_sync(cron synchronizacji statusow) + defaultyapp_settingsdla kierunku i interwalu status sync - migracja20260304_000028_add_allegro_status_sync_schedule.sql. - 2026-03-04: Import Allegro mapuje forme wysylki do
orders.external_carrier_idiorders.external_carrier_account_id- bez zmian schematu. - 2026-03-05: Dodano tabele
order_activity_log— uniwersalny log aktywnosci zamowien (zmiany statusow, platnosci, przesylki, faktury, wiadomosci itp.). - 2026-03-05: Dodano tabele
apaczka_integration_settingspod konfiguracje klucza API Apaczka. - 2026-03-05: Dodano tabele
inpost_integration_settingspod konfiguracje integracji InPost ShipX. - 2026-03-06: Dodano kolumne
carrierdo tabeliallegro_delivery_method_mappings(default 'allegro') - umozliwia mapowanie na roznych przewoznikow (Allegro, InPost). - 2026-03-06: Wdrozono migracje
20260302_000019_add_internal_order_number_to_orders.sql- kolumnainternal_order_numberVARCHAR(11) UNIQUE w tabeliorders, formatOPXXXXXXXXX(np.OP000000001); backfill istniejacych rekordow; UI: lista i szczegoly zamowien wyswietlaja numer wewnetrzny jako glowny identyfikator. - 2026-03-04: Poprawiono prezentacje daty zamowienia na liscie (
fallback ordered_at -> source_created_at -> source_updated_at -> fetched_at) - bez zmian schematu. - 2026-03-08: Rozpoczeto ujednolicanie integracji - migracja
20260308_000037_unify_integrations_base_links.sql:- dodano
integration_iddo tabelallegro_integration_settings,apaczka_integration_settings,inpost_integration_settings, - dodano FK/UNIQUE 1:1 z tabela
integrations, - dodano/uzupelniono rekordy bazowe providerow (
allegro,apaczka,inpost) wintegrations.
- dodano
- 2026-03-08: Dodano UI i endpointy konfiguracji
shopPRO(wieloinstancyjnie) w oparciu o istniejaca tabeleintegrations(type=shoppro) - bez zmian schematu. - 2026-03-08: Dodano mapowanie statusow dla
shopPRO(zakladkaStatusy) z zapisem do istniejacej tabeliorder_status_mappingsperintegration_id- bez zmian schematu. - 2026-03-08: Dodano migracje naprawcza
20260308_000038_ensure_order_status_mappings_table.sql(uzupelnia brakujaca tabeleorder_status_mappingsw srodowiskach z niepelna historia migracji). - 2026-03-08: Dodano migracje naprawcza
20260308_000039_ensure_integrations_fetch_columns.sql(uzupelnia brakujace kolumnyorders_fetch_enablediorders_fetch_start_datewintegrations). - 2026-03-08: Dodano migracje
20260308_000040_ensure_shoppro_orders_import_schedule.sql(seed/naprawa harmonogramucron_schedulesdla jobashoppro_orders_import) - bez zmian schematu tabel. - 2026-03-08: Dodano migracje
20260308_000041_ensure_shoppro_status_sync_schedule_and_direction.sql(seed/naprawa harmonogramucron_schedulesdla jobashoppro_order_status_syncoraz uzupelnienie kolumnyintegrations.order_status_sync_directionw srodowiskach niezgodnych). - 2026-03-08: Dodano migracje
20260308_000042_ensure_shoppro_payment_sync_schedule_and_columns.sql:- uzupelnienie kolumny
integrations.payment_sync_status_codes_json(JSON) dla konfiguracji statusow objetych kontrola platnosci, - seed/naprawa harmonogramu
cron_schedulesdla jobashoppro_payment_status_sync(domyslnie 600s, priorytet 105).
- uzupelnienie kolumny
- 2026-03-08: Dodano migracje
20260308_000043_create_shoppro_delivery_method_mappings_table.sql:- nowa tabela
shoppro_delivery_method_mappings(mapowanie form dostawy perintegration_id), - tabela przechowuje mapowanie formy shopPRO na usluge Allegro WZA/InPost (
allegro_delivery_method_id,allegro_credentials_id,allegro_carrier_id,allegro_service_name,carrier).
- nowa tabela
- 2026-03-08: Poprawiono mapowanie importu zamowien shopPRO (kwoty i miniatury pozycji) - bez zmian schematu bazy.
- 2026-03-08: Poprawiono mapowanie danych wysylki shopPRO (paczkomat/punkt odbioru + kontakt klienta + koszt transportu) - bez zmian schematu bazy.
- 2026-03-08: Dodano migracje
20260308_000044_create_carrier_delivery_method_mappings_table.sql:- nowa tabela
carrier_delivery_method_mappings(wspolne mapowanie form dostawy dla roznych zrodel zamowien i providerow wysylek), - migracja backfilluje dane z
allegro_delivery_method_mappingsishoppro_delivery_method_mappings.
- nowa tabela
- 2026-03-08: Dodano migracje
20260308_000045_extend_apaczka_credentials.sql:- rozszerzenie
apaczka_integration_settingsoapp_idiapp_secret_encrypted, - migracja przenosi legacy sekret z
api_key_encrypteddoapp_secret_encrypted.
- rozszerzenie
- 2026-03-08: Poprawiono mapowanie danych faktury w imporcie shopPRO - bez zmian schematu:
orders.is_invoicejest wykrywany takze po polach firmowych (firm_*),- adres faktury jest zapisywany do istniejacej tabeli
order_addresses(address_type=invoice,company_name,company_tax_number).
- 2026-03-08: Poprawiono diagnostyke tworzenia przesylek Apaczka - bez zmian schematu:
- payload tworzenia przesylki przekazuje punkty odbioru/nadania (
receiver.point,sender.point) z danych formularza, - komunikaty bledow tworzenia zawieraja rozszerzona diagnostyke parametrow wyceny.
- payload tworzenia przesylki przekazuje punkty odbioru/nadania (
- 2026-03-08: Poprawiono obsluge bledow etykiet Apaczka - bez zmian schematu:
- przy odpowiedzi API
Label is not available for this orderrekordshipment_packagesjest oznaczany statusemerrori zachowuje tresc bledu.
- przy odpowiedzi API
- 2026-03-08: Poprawiono fallback danych odbiorcy dla przesylek punktowych Apaczka (Orlen/InPost) - bez zmian schematu:
- brakujace dane adresowe odbiorcy sa uzupelniane na etapie budowania payloadu z danych zamowienia (
delivery,customer) oraz metadanych punktu (parcel_name).
- brakujace dane adresowe odbiorcy sa uzupelniane na etapie budowania payloadu z danych zamowienia (
- 2026-03-08: Rozszerzono fallback adresu odbiorcy dla przesylek punktowych Apaczka - bez zmian schematu:
- serwis probuje uzupelnic adres punktu przez API
pointsporeceiver_point_id, - przy dalszych brakach danych dla przesylki punktowej dopelniane jest minimum techniczne wymagane przez lokalna walidacje payloadu.
- serwis probuje uzupelnic adres punktu przez API
- 2026-03-08: Poprawiono przekazywanie punktow w payloadzie Apaczka (nadanie/odbior) - bez zmian schematu:
- payload wysyla aliasy identyfikatora punktu (
point,foreign_address_id,point_id) dla zgodnosci z wariantami API.
- payload wysyla aliasy identyfikatora punktu (
- 2026-03-08: Uzupelniono payload odbioru kurierem Apaczka (
pickup.date,pickup.hours_from,pickup.hours_to) - bez zmian schematu. - 2026-03-08: Dodano migracje
20260308_000046_extend_company_settings_contact_person.sql:- rozszerzenie
company_settingsosender_contact_person(osoba kontaktowa nadawcy), - wykorzystywane w payloadzie Apaczka jako
address.sender.contact_person.
- rozszerzenie
- 2026-03-08: Ujednolicono styl naglowkow sekcji UI (
section-title) - bez zmian schematu bazy. - 2026-03-14: Dodano migracje
20260314_000048_add_orders_performance_indexes.sql— indeksy wydajnosciowe na tabeliorders:source,external_status_id,ordered_at, composite(source, external_status_id). - 2026-03-14: Dodano migracje
20260314_000049_add_cron_last_run_at_setting.sql— seed kluczacron_web_last_run_atwapp_settings(cron throttle przeniesiony z sesji do DB). - 2026-03-14: Przemianowano migracje
20260301_000014_add_products_sku_format_setting.sqlna20260301_000014b_add_products_sku_format_setting.sql— deduplikacja numeru sekwencji (kolizja z000014_create_product_integration_translations). - 2026-03-15: Dodano migracje
20260315_000050_create_receipt_configs_table.sql— tabela konfiguracji paragonow (szablony numeracji, ustawienia imiennosci, zrodlo daty sprzedazy). - 2026-03-15: Dodano migracje
20260315_000051_create_receipts_table.sql— tabela wystawionych paragonow ze snapshotem danych (JSON seller/buyer/items), FK do orders i receipt_configs. - 2026-03-15: Dodano migracje
20260315_000052_create_receipt_number_counters_table.sql— liczniki numeracji paragonow per konfiguracja i okres (miesiac/rok). - 2026-03-15: Dodano migracje
20260315_000053_extend_company_settings_extra_fields.sql— rozszerzenie company_settings o bdo_number, regon, court_register, logo_path. - 2026-03-15: Dodano migracje
20260315_000054_create_email_mailboxes_table.sql— tabela skrzynek pocztowych SMTP (credentials szyfrowane IntegrationSecretCipher). - 2026-03-15: Dodano migracje
20260315_000055_create_email_templates_table.sql— tabela szablonow wiadomosci email z FK do email_mailboxes. - 2026-03-15: Dodano migracje
20260315_000056_create_email_logs_table.sql— tabela logow wyslanych wiadomosci z FK do email_templates, email_mailboxes i indeksami na order_id, status, sent_at. - 2026-03-16: Dodano migracje
20260316_000001_add_attachment1_to_email_templates.sql— kolumna attachment_1 VARCHAR(50) w email_templates (typ zalacznika, np. 'receipt'). - 2026-03-17: Nowa zaleznosc
phpmailer/phpmailerv7.0.2. ModulApp\Modules\Email— wysylka e-mail z zamowien, resolwer zmiennych, generowanie zalacznikow PDF. Tabelaemail_logswykorzystywana do logowania wysylek (bez nowych migracji).
Tabele
users
- Uzytkownicy panelu.
- Klucz unikalny:
email.
order_status_groups
- Grupy statusow zamowien zarzadzane z UI.
- Kolumny:
id(PK, int unsigned, AI),name(varchar 120),code(varchar 64, UNIQUE),color_hex(char 7, domyslnie#64748b),sort_order(int, domyslnie0),is_active(tinyint(1), domyslnie1),created_at,updated_at.
- Indeksy:
order_status_groups_code_unique(UNIQUE:code),order_status_groups_sort_order_idx(sort_order).
order_statuses
- Statusy przypisane do grup statusow.
- Kolumny:
id(PK, int unsigned, AI),group_id(FK ->order_status_groups.id),name(varchar 120),code(varchar 64, UNIQUE),sort_order(int, domyslnie0),is_active(tinyint(1), domyslnie1),created_at,updated_at.
- Indeksy:
order_statuses_code_unique(UNIQUE:code),order_statuses_group_sort_idx(group_id,sort_order,id).
- Klucze obce:
order_statuses_group_fk:group_id->order_status_groups.id(ON DELETE CASCADE,ON UPDATE CASCADE).
Domena zamowien (generyczna)
- Wdrozone tabele:
ordersorder_addressesorder_itemsorder_paymentsorder_shipmentsorder_documentsorder_notesorder_status_historyorder_tags_dictorder_tag_linksintegration_order_sync_state
- Charakterystyka:
- schema neutralna wzgledem dostawcy API (pola
source_*,external_*), - kolekcje zamowienia rozdzielone na osobne tabele 1:N,
payload_jsondostepne dla diagnostyki/replay,- historia zmian statusow utrzymywana w
order_status_history.
- schema neutralna wzgledem dostawcy API (pola
integration_order_sync_state
- Kursor synchronizacji importu zamowien dla integracji (uzywany przez cron auto-importu Allegro i push statusow shopPRO).
- Kolumny:
integration_id(PK),last_synced_order_updated_at(datetime, nullable) lub historycznielast_synced_external_updated_at,last_synced_source_order_id(varchar, nullable) lub historycznielast_synced_external_order_id,last_run_at(datetime),last_success_at(datetime),last_status_pushed_at(datetime, nullable) — kursor synchronizacji push statusow orderPRO -> shopPRO,last_error(varchar 500),created_at,updated_at.
order_status_mappings
- Mapowanie statusow zamowien shopPRO na statusy orderPRO per instancja integracji.
- Kolumny:
id(PK, int unsigned, AI),integration_id(int unsigned, FK ->integrations.id),shoppro_status_code(varchar 64),shoppro_status_name(varchar 128, nullable),orderpro_status_code(varchar 64),created_at,updated_at.
- Indeksy:
order_status_mappings_integration_shoppro_unique(UNIQUE:integration_id,shoppro_status_code),order_status_mappings_integration_idx(integration_id),order_status_mappings_orderpro_idx(orderpro_status_code).
- Klucze obce:
order_status_mappings_integration_fk:integration_id->integrations.id(ON DELETE CASCADE,ON UPDATE CASCADE).
allegro_integration_settings
- Konfiguracja OAuth i sync dla integracji Allegro per srodowisko (
sandbox|production) zarzadzana zUstawienia > Integracje > Allegro. - Kolumny:
id(PK, tinyint unsigned),integration_id(int unsigned, UNIQUE, FK ->integrations.id),environment(varchar 16,sandbox|production),client_id(varchar 128),client_secret_encrypted(text),redirect_uri(varchar 255),orders_fetch_enabled(tinyint(1), domyslnie0),orders_fetch_start_date(date),access_token_encrypted(mediumtext),refresh_token_encrypted(mediumtext),token_type(varchar 32),token_scope(varchar 255),token_expires_at(datetime),connected_at(datetime),created_at,updated_at.
- Indeksy:
allegro_integration_settings_environment_idx(environment),allegro_integration_settings_token_expires_at_idx(token_expires_at),allegro_integration_settings_integration_unique(integration_id, UNIQUE).
allegro_order_status_mappings
- Mapowanie kodow statusow Allegro na kody statusow orderPRO.
- Kolumny:
id(PK, int unsigned, AI),allegro_status_code(varchar 64, UNIQUE),allegro_status_name(varchar 120),orderpro_status_code(varchar 64),created_at,updated_at.
- Indeksy:
allegro_order_status_mappings_code_unique(UNIQUE:allegro_status_code),allegro_order_status_mappings_orderpro_code_idx(orderpro_status_code).
order_activity_log
- Uniwersalny log aktywnosci zamowienia (zmiany statusow, platnosci, przesylki, faktury, wiadomosci itp.).
- Kolumny:
id(PK, bigint unsigned, AI),order_id(FK ->orders.id, CASCADE),event_type(varchar 32) — typ zdarzenia:status_change,payment,invoice,shipment,message,document,import,note,summary(varchar 255) — czytelny opis zdarzenia,details_json(json, nullable) — dodatkowe dane strukturalne,actor_type(varchar 16, domyslniesystem) —system,user,import,api,sync,actor_name(varchar 128, nullable) — nazwa uzytkownika lub identyfikator systemu,created_at.
- Indeksy:
order_activity_log_order_created_idx(order_id,created_at),order_activity_log_event_type_idx(event_type).
integrations
- Bazowa tabela wszystkich instancji integracji (model docelowy pod wielu providerow i wiele kont per provider).
- Kolumny:
id(PK, int unsigned, AI),type(varchar 32, np.allegro,apaczka,inpost,shoppro),name(varchar 128, unikalne w obrebietype),base_url(varchar 255),api_key_encrypted(text, nullable),timeout_seconds(smallint unsigned),is_active(tinyint(1)),orders_fetch_enabled(tinyint(1)),orders_fetch_start_date(date, nullable),order_status_sync_direction(varchar 32),payment_sync_status_codes_json(json, nullable; lista kodow statusow orderPRO, dla ktorych cron ma sprawdzac oplacenie zamowien),- pola diagnostyki testu (
last_test_status,last_test_http_code,last_test_message,last_test_at), created_at,updated_at.
shoppro_delivery_method_mappings
- Mapowanie form dostawy shopPRO na uslugi dostawy Allegro WZA/InPost per instancja integracji.
- Kolumny:
id(PK, int unsigned, AI),integration_id(int unsigned, FK ->integrations.id),order_delivery_method(varchar 200),carrier(varchar 50; np.allegro,inpost),allegro_delivery_method_id(varchar 128),allegro_credentials_id(varchar 128, nullable),allegro_carrier_id(varchar 128, nullable),allegro_service_name(varchar 255, nullable),created_at,updated_at.
- Indeksy:
shoppro_dm_mapping_unique(UNIQUE:integration_id,order_delivery_method),shoppro_dm_mapping_integration_idx(integration_id).
- Klucze obce:
shoppro_dm_mapping_integration_fk:integration_id->integrations.id(ON DELETE CASCADE,ON UPDATE CASCADE).
apaczka_integration_settings
- Tabela kompatybilnosci dla integracji Apaczka (
id = 1); sekret API jest utrzymywany bazowo wintegrations.api_key_encrypted. - Kolumny:
id(PK, tinyint unsigned),integration_id(int unsigned, UNIQUE, FK ->integrations.id),app_id(varchar 128, nullable),app_secret_encrypted(text, nullable),api_key_encrypted(text, nullable),created_at,updated_at.
carrier_delivery_method_mappings
- Wspolne mapowanie form dostawy zamowien na providerow wysylek (model docelowy pod wielu kurierow:
allegro_wza,apaczka, kolejne). - Kolumny:
id(PK, int unsigned, AI),source_system(varchar 32; np.allegro,shoppro),source_integration_id(int unsigned;0dla mapowan globalnych, np. Allegro),order_delivery_method(varchar 200),provider(varchar 50; np.allegro_wza,apaczka),provider_service_id(varchar 128),provider_account_id(varchar 128, nullable),provider_carrier_id(varchar 128, nullable),provider_service_name(varchar 255, nullable),created_at,updated_at.
- Indeksy:
carrier_dm_mapping_unique(UNIQUE:source_system,source_integration_id,order_delivery_method),carrier_dm_mapping_provider_idx(provider),carrier_dm_mapping_source_idx(source_system,source_integration_id).
inpost_integration_settings
- Tabela ustawien specyficznych InPost ShipX (
id = 1); token API utrzymywany bazowo wintegrations.api_key_encrypted. - Kolumny:
id(PK, tinyint unsigned),integration_id(int unsigned, UNIQUE, FK ->integrations.id),api_token_encrypted(text, nullable),organization_id(varchar 50, nullable),environment(enum: sandbox, production),default_dispatch_method(enum: pop, parcel_locker, courier),default_dispatch_point(varchar 50, nullable),default_insurance(decimal 10,2, nullable),default_locker_size(enum: small, medium, large),default_courier_length,default_courier_width,default_courier_height(smallint unsigned),label_format(enum: Pdf, Zpl, Epl),weekend_delivery,auto_insurance_value,multi_parcel(tinyint 0/1),created_at,updated_at.
company_settings
- Ustawienia firmy/nadawcy wykorzystywane m.in. przy tworzeniu przesylek.
- Kolumny:
id(PK, tinyint unsigned),company_name(varchar 200, nullable),person_name(varchar 200, nullable),sender_contact_person(varchar 200, nullable),street(varchar 200, nullable),city(varchar 128, nullable),postal_code(varchar 16, nullable),country_code(char 2, defaultPL),phone(varchar 64, nullable),email(varchar 128, nullable),tax_number(varchar 64, nullable),bank_account(varchar 64, nullable),bank_owner_name(varchar 200, nullable),bdo_number(varchar 20, nullable),regon(varchar 14, nullable),court_register(varchar 128, nullable),logo_path(varchar 255, nullable),default_package_length_cm(decimal 8,1),default_package_width_cm(decimal 8,1),default_package_height_cm(decimal 8,1),default_package_weight_kg(decimal 8,3),default_label_format(varchar 8),created_at,updated_at.
receipt_configs
- Konfiguracje paragonow (szablony numeracji, ustawienia).
- Kolumny:
id(PK, int unsigned, AI),name(varchar 128),is_active(tinyint(1), default 1),number_format(varchar 64, defaultPAR/%N/%M/%Y),numbering_type(enum: monthly, yearly; default monthly),is_named(tinyint(1), default 0) — czy paragon imienny (dane klienta),sale_date_source(enum: order_date, payment_date, issue_date; default issue_date),order_reference(enum: none, orderpro, integration; default none),created_at,updated_at.
receipts
- Wystawione paragony ze snapshotem danych.
- Kolumny:
id(PK, int unsigned, AI),order_id(bigint unsigned, FK ->orders.idCASCADE),config_id(int unsigned, FK ->receipt_configs.idRESTRICT),receipt_number(varchar 64, UNIQUE),issue_date(date),sale_date(date),seller_data_json(json) — snapshot danych sprzedawcy,buyer_data_json(json, nullable) — snapshot danych klienta (jesli imienny),items_json(json) — snapshot pozycji zamowienia,total_net(decimal 12,2),total_gross(decimal 12,2),order_reference_value(varchar 128, nullable),created_by(int unsigned, nullable),created_at.
- Indeksy:
receipts_number_unique(UNIQUE:receipt_number),receipts_order_idx(order_id),receipts_config_idx(config_id),receipts_issue_date_idx(issue_date).
- Klucze obce:
receipts_order_fk:order_id->orders.id(ON DELETE CASCADE),receipts_config_fk:config_id->receipt_configs.id(ON DELETE RESTRICT).
receipt_number_counters
- Liczniki numeracji paragonow per konfiguracja i okres.
- Kolumny:
id(PK, int unsigned, AI),config_id(int unsigned, FK ->receipt_configs.idCASCADE),year(smallint unsigned),month(tinyint unsigned, nullable — null dla numeracji rocznej),last_number(int unsigned, default 0).
- Indeksy:
receipt_counters_config_period_unique(UNIQUE:config_id,year,month).
- Klucze obce:
receipt_counters_config_fk:config_id->receipt_configs.id(ON DELETE CASCADE).
email_mailboxes
- Skrzynki pocztowe SMTP do wysylki wiadomosci e-mail.
- Kolumny:
idINT UNSIGNED PK AUTO_INCREMENTnameVARCHAR(100) NOT NULL — nazwa wyswietlanasmtp_hostVARCHAR(255) NOT NULLsmtp_portSMALLINT UNSIGNED NOT NULL DEFAULT 587smtp_encryptionENUM('tls','ssl','none') NOT NULL DEFAULT 'tls'smtp_usernameVARCHAR(255) NOT NULLsmtp_password_encryptedTEXT NOT NULL — szyfrowane IntegrationSecretCipher (AES-256-CBC+HMAC)sender_emailVARCHAR(255) NOT NULLsender_nameVARCHAR(200) DEFAULT NULLis_defaultTINYINT(1) NOT NULL DEFAULT 0is_activeTINYINT(1) NOT NULL DEFAULT 1created_at,updated_atDATETIME
email_templates
- Szablony wiadomosci e-mail z systemem zmiennych.
- Kolumny:
idINT UNSIGNED PK AUTO_INCREMENTnameVARCHAR(200) NOT NULL — nazwa szablonusubjectVARCHAR(500) NOT NULL — temat (moze zawierac zmienne)body_htmlTEXT NOT NULL — tresc HTML (Quill.js output)mailbox_idINT UNSIGNED DEFAULT NULL — FK do email_mailboxes ON DELETE SET NULLattachment_1VARCHAR(50) DEFAULT NULL — typ zalacznika nr 1 (np. 'receipt' = paragon); NULL = brakis_activeTINYINT(1) NOT NULL DEFAULT 1created_at,updated_atDATETIME
- Indeksy:
idx_email_templates_mailbox(mailbox_id)
email_logs
- Log wyslanych wiadomosci e-mail.
- Kolumny:
idBIGINT UNSIGNED PK AUTO_INCREMENTtemplate_idINT UNSIGNED DEFAULT NULL — FK do email_templates ON DELETE SET NULLmailbox_idINT UNSIGNED DEFAULT NULL — FK do email_mailboxes ON DELETE SET NULLorder_idINT UNSIGNED DEFAULT NULLrecipient_emailVARCHAR(255) NOT NULLrecipient_nameVARCHAR(200) DEFAULT NULLsubjectVARCHAR(500) NOT NULLbody_htmlTEXT NOT NULL — tresc po rozwinieciu zmiennychattachments_jsonJSON DEFAULT NULL — lista zalacznikow [{name, path, type}]statusENUM('sent','failed','pending') NOT NULL DEFAULT 'pending'error_messageTEXT DEFAULT NULLsent_atDATETIME DEFAULT NULLcreated_atDATETIME
- Indeksy:
idx_email_logs_template,idx_email_logs_mailbox,idx_email_logs_order,idx_email_logs_status,idx_email_logs_sent_at
automation_rules
- Reguly automatyzacji (zdarzenie -> warunki -> akcje).
- Kolumny:
idINT UNSIGNED PK AUTO_INCREMENTnameVARCHAR(128) NOT NULL — nazwa regulyevent_typeVARCHAR(64) NOT NULL — typ zdarzenia (np. 'receipt.created')is_activeTINYINT(1) NOT NULL DEFAULT 1created_at,updated_atDATETIME
- Indeksy:
auto_rules_event_active_idx(event_type,is_active)
automation_conditions
- Warunki reguly automatyzacji (laczenie logiczne AND).
- Kolumny:
idINT UNSIGNED PK AUTO_INCREMENTrule_idINT UNSIGNED NOT NULL, FK ->automation_rules.idON DELETE CASCADEcondition_typeVARCHAR(64) NOT NULL — typ warunku (np. 'integration')condition_valueJSON NOT NULL — konfiguracja warunku (np. {"integration_ids": [1, 3]})sort_orderSMALLINT UNSIGNED NOT NULL DEFAULT 0
- Indeksy:
auto_cond_rule_idx(rule_id)
- Klucze obce:
auto_cond_rule_fk:rule_id->automation_rules.id(ON DELETE CASCADE)
automation_actions
- Akcje do wykonania po spelnieniu warunkow reguly.
- Kolumny:
idINT UNSIGNED PK AUTO_INCREMENTrule_idINT UNSIGNED NOT NULL, FK ->automation_rules.idON DELETE CASCADEaction_typeVARCHAR(64) NOT NULL — typ akcji (np. 'send_email')action_configJSON NOT NULL — konfiguracja akcji (np. {"template_id": 5, "recipient": "client"})sort_orderSMALLINT UNSIGNED NOT NULL DEFAULT 0
- Indeksy:
auto_act_rule_idx(rule_id)
- Klucze obce:
auto_act_rule_fk:rule_id->automation_rules.id(ON DELETE CASCADE)
Zasady aktualizacji
- Po kazdej migracji dopisz:
- nowe/zmienione tabele i kolumny,
- indeksy i klucze obce,
- wplyw na dane i kompatybilnosc wsteczna.
Drafty (nieaktywne)
database/drafts/20260302_orders_schema_v1.sql:- propozycja normalizacji domeny zamowien pod integracje zewnetrzne (
orders,order_items,order_status_history, platnosci, wysylki, dokumenty, notatki, tagi, sync-state), - plik nie jest odpalany przez obecny migrator (
database/migrations/*.sql).
- propozycja normalizacji domeny zamowien pod integracje zewnetrzne (
bin/deploy_and_seed_orders.php:- techniczny skrypt wdrozeniowy, ktory aplikuje schema z draftu i opcjonalnie seeduje dane testowe.