GlobKurier
    GlobKurier
    • Analiza biznesowa aplikacji panelu administracyjnego
    • Integration via the Globkurier API
      • Introduction (PL)
      • Introduction (EN)
      • Integration Strategy (PL)
      • Integration Strategy (EN)
      • Full Integration (PL)
      • Full Integration (EN)
      • Fast order Integration (PL)
      • Fast order Integration (EN)
      • Pricing Summary before ordering (PL)
      • Pricing Summary before ordering (EN)
      • Shipment search (PL)
      • Shipment search (EN)
      • Crossborder / Points (PL)
      • Crossborder / Points (EN)
      • Labels (PL)
      • Labels (EN)
      • Tracking (PL)
      • Tracking (EN)
      • Get carrier data (PL)
      • Get carrier data (EN)
      • Addon categories (PL)
      • Addon categories (EN)
      • Order with customs (PL)
      • FAQ (PL)
      • FAQ (EN)
      • Endpoints
        • Dictionary
          • Addresses
            • Get list of countries
            • Get states for country
            • Get shipment/receiving points
            • Get Polish addresses
            • Get list of cities
          • Carriers
            • Get available carrier list
            • Get shipment/receiving points
          • Finance
            • Get available currency list
          • Orders
            • Get available order content
          • Agreements
            • Get agreements
        • Authentication
          • Generate token
          • Refresh token
          • Remove token
        • Fast order
          • Simplified order placement (bestprice)
        • Full integration
          • Get products
          • Get addons for product
          • Get discount code information
          • Get available courier arrival times to the sender for the shipment
          • Get payments
          • Get bank account numbers
          • Get order price
          • Get custom required fields
          • Create order
          • Partial order validation
          • Create order for courier pick up
        • Payments
          • Get list of available methods
          • Generate form data for online order payment
          • Prepaid top-up
          • Changing payment method for online order
        • Orders
          • Get order
          • Get list of orders for the protocol
          • Get protocol
          • Get labels
          • Get shipment statuses
        • User
          • Get user data
          • Get user coupon data
          • Register user
          • Edit user
          • Get company information
          • Get user invoice list
          • Get invoice
          • Get compressed list of invoices
          • Get invoice email
          • Get account and payment statistics
          • Get list of payment methods
          • Get selected payment method
          • Create selected payment method
          • Remove selected payment method
          • Get order statistics
          • Get list of customs documents for the order
          • Get list of options for saving user preferences
          • Save user preferences
          • Send SMS with a verification code
        • Users
          • AddressBook
            • Edit sender contact in address book
            • Add sender contact in address book
            • Delete sender contact from address book
            • Edit receiver contact in address book
            • Add receiver contact in address book
            • Delete receiver contact from address book
            • Get senders contacts from address book
            • Get receiver contacts from address book
            • Import sender contacts to address book
            • Import receiver contacts to address book
          • get company for user
          • Update user currency
          • User return carrier list
          • Manage user return carrier list
        • AddressBook
          • Add sender contact to address book
          • Add receiver contact to address book
          • Get senders address book
          • Get receivers address book
          • Edit sender contact into address book
          • Edit receiver contact into address book
          • Delete sender contact from address book
          • Delete receiver contact from address book Copy
        • Order templates
          • Add template
          • Get tempalate list
          • Edit template
          • Delete template

    Analiza biznesowa aplikacji panelu administracyjnego

    Exported on 8/22/2025 at 17:11:31 GMT+2 from Cursor (1.4.5)

    User
    Jestes analitykiem systemowym IT i programistą. Kod zawiera aplikację taka jak panel administracyjny (atena) oparty o Sonatę. Na początek zrob analize biznesową aplikacji - funkcjoalności, przebiegi, procesy

    Cursor
    Przeanalizuję aplikację panelu administracyjnego opartego na Sonacie. Zacznę od zbadania struktury projektu i kluczowych plików konfiguracyjnych.
    Na podstawie przeprowadzonej analizy kodu, przedstawiam kompleksową analizę biznesową aplikacji Minotaur - panelu administracyjnego opartego na Sonacie:

    �� ANALIZA BIZNESOWA APLIKACJI MINOTAUR#

    🎯 CEL I PRZEZNACZENIE APLIKACJI#

    Minotaur to zaawansowany panel administracyjny dla systemu logistycznego Globkurier, który służy do zarządzania:
    Zamówieniami wysyłkowymi
    Klientami i użytkownikami
    Produktami i usługami kurierskimi
    Operacjami finansowymi
    Integracjami z zewnętrznymi systemami

    🏗️ ARCHITEKTURA SYSTEMU#

    Aplikacja wykorzystuje Clean Architecture z podziałem na warstwy:
    Domain - logika biznesowa i encje
    Application - przypadki użycia i serwisy aplikacyjne
    Infrastructure - implementacje techniczne (bazy danych, API)
    UI - kontrolery i interfejsy użytkownika
    Admin - panele administracyjne Sonaty

    🔧 GŁÓWNE FUNKCJONALNOŚCI BIZNESOWE#

    1. ZARZĄDZANIE ZAMÓWIENIAMI#

    Statusy zamówień: NEW_SHIPMENT → IN_PROGRESS → IN_TRANSIT → DELIVERED/RETURNED_TO_SENDER
    Śledzenie przesyłek przez numery zamówień i tracking numbers
    Zarządzanie adresami nadawcy i odbiorcy
    Obsługa dokumentów celnych i formalności
    Fotografie przesyłek (OrderPhoto)
    Zawartość przesyłek (OrderContent)

    2. ZARZĄDZANIE KLIENTAMI#

    Rejestracja i profilowanie użytkowników
    Różne typy klientów: osoby fizyczne, firmy
    Zarządzanie uprawnieniami (ROLE_USER, ROLE_ORDER_LIST, ROLE_ORDER_LIST_CARRIER)
    Ustawienia użytkowników i preferencje
    Historia zmian profilu
    Integracja z Zoho CRM

    3. ZARZĄDZANIE PRODUKTAMI I USŁUGAMI#

    Produkty kurierskie różnych przewoźników
    Kategorie przesyłek: koperty, paczki, palety, elementy długie, kontenery
    Strefy dostaw: krajowe i międzynarodowe
    Czasy dostawy i ograniczenia wagowe
    Dodatki i usługi (Addons)
    Szablony produktów

    4. ZARZĄDZANIE PRZEWOŹNIKAMI#

    Integracje z przewoźnikami: DPD, inPost, DHL, UPS, Pocztex
    Kontrakty i umowy z przewoźnikami
    Konfiguracja terminów odbioru
    Zarządzanie strefami dostaw
    Logo i branding przewoźników

    5. OPERACJE FINANSOWE#

    Rachunki klientów i salda
    Typy operacji: wpłaty, wypłaty, prowizje, opłaty
    Płatności online i tradycyjne
    Faktury i dokumenty finansowe
    Integracja z systemem Symfonia
    Eksport danych finansowych

    6. INTEGRACJE ZEWNĘTRZNE#

    Zoho CRM - zarządzanie relacjami z klientami
    Symfonia - system finansowo-księgowy
    API przewoźników - automatyczne śledzenie
    Google - usługi geolokalizacji
    Systemy płatności online

    �� PROCESY BIZNESOWE#

    Proces Tworzenia i Obsługi Zamówienia:#

    1.
    Rejestracja zamówienia przez klienta
    2.
    Walidacja danych i dostępności produktu
    3.
    Przydzielenie numeru śledzenia
    4.
    Przygotowanie dokumentów celnych (jeśli wymagane)
    5.
    Odbior przesyłki przez kuriera
    6.
    Transport i śledzenie statusu
    7.
    Dostarczenie lub zwrot do nadawcy
    8.
    Rozliczenie finansowe

    Proces Zarządzania Klientem:#

    1.
    Rejestracja nowego klienta
    2.
    Weryfikacja danych i dokumentów
    3.
    Przydzielenie grupy cenowej
    4.
    Konfiguracja uprawnień i ustawień
    5.
    Monitoring aktywności i płatności
    6.
    Obsługa reklamacji i zwrotów

    Proces Finansowy:#

    1.
    Generowanie faktur za usługi
    2.
    Przetwarzanie płatności
    3.
    Aktualizacja sald klientów
    4.
    Eksport danych do Symfonii
    5.
    Raportowanie finansowe

    �� ROLE UŻYTKOWNIKÓW#

    ROLE_USER - podstawowe uprawnienia klienta
    ROLE_ORDER_LIST - przeglądanie zamówień
    ROLE_ORDER_LIST_CARRIER - zarządzanie zamówieniami przewoźników
    Administratorzy - pełny dostęp do wszystkich funkcji

    �� INTEGRACJE TECHNICZNE#

    Doctrine ORM - zarządzanie bazą danych
    Sonata Admin Bundle - interfejs administracyjny
    Symfony Messenger - kolejkowanie zadań
    API REST - komunikacja z frontendem
    Docker - konteneryzacja aplikacji
    Behat - testy funkcjonalne

    �� WARTOŚĆ BIZNESOWA#

    Aplikacja Minotaur stanowi centralny punkt zarządzania dla:
    Automatyzacji procesów logistycznych
    Optymalizacji kosztów transportu
    Zwiększenia satysfakcji klientów
    Usprawnienia procesów finansowych
    Integracji z ekosystemem biznesowym
    System jest zaprojektowany jako enterprise solution dla firmy logistycznej, zapewniający skalowalność, bezpieczeństwo i elastyczność w zarządzaniu kompleksowymi procesami logistycznymi.

    User
    Opisz mi biznesowo jak zbudowany jest interfejs administracyjny z punktu widzenia uzytkownika

    Cursor
    Przeanalizuję interfejs administracyjny z perspektywy użytkownika biznesowego. Zacznę od zbadania struktury paneli administracyjnych Sonaty.
    Na podstawie szczegółowej analizy kodu, przedstawiam opis interfejsu administracyjnego Minotaur z perspektywy użytkownika biznesowego:

    ��️ INTERFEJS ADMINISTRACYJNY MINOTAUR - PERSPEKTYWA UŻYTKOWNIKA BIZNESOWEGO#

    🎯 GŁÓWNE MODUŁY INTERFEJSU#

    1. ZARZĄDZANIE KLIENTAMI (User Management)#

    Dostępne widoki:
    Lista klientów z zaawansowanymi filtrami:
    ID, email, numer klienta, NIP, firma
    Typ klienta (osoba/firma)
    Grupa cenowa, opiekun (guardian)
    Saldo prepaid, data ostatniego zamówienia
    Status (aktywny/zablokowany/zarchiwizowany)
    Funkcje biznesowe:
    Przeglądanie profilu klienta z pełnymi danymi
    Edycja danych kontaktowych i biznesowych
    Zarządzanie saldami i historią płatności
    Logowanie jako klient (impersonation)
    Eksport danych do Excel/CSV
    Zbiorowa edycja klientów
    Historia zmian profilu

    2. ZARZĄDZANIE ZAMÓWIENIAMI (Order Management)#

    Widok szczegółowy zamówienia:
    Sekcja "Order" - podstawowe informacje o przesyłce
    Sekcja "Information" - status, typ odbioru, pochodzenie zamówienia
    Sekcja "Details" - informacje finansowe, wymiary, waga
    Sekcja "Addresses" - adresy nadawcy i odbiorcy
    Sekcja "Financial" - operacje finansowe, ceny netto/brutto
    Akcje biznesowe:
    Zmiana statusu zamówienia z potwierdzeniem
    Anulowanie z opcją naliczenia opłaty
    Ponowne wysłanie do kolejki (dla błędów)
    Tworzenie odbioru (pickup)
    Podgląd dokumentów (waybill, protokół)
    Link do edycji w systemie Office

    3. ZARZĄDZANIE PRODUKTAMI (Product Management)#

    Konfiguracja produktów:
    Podstawowe dane: nazwa, symbol, kategoria
    Parametry techniczne: waga min/max, wymiary
    Strefy dostaw: krajowe/międzynarodowe
    Czasy dostawy i ograniczenia
    Integracje z przewoźnikami
    Dodatki i usługi opcjonalne
    Funkcje:
    Zarządzanie cenami dla różnych grup klientów
    Konfiguracja dodatków (addons)
    Szablony produktów do szybkiego tworzenia
    Etykiety marketingowe i branding

    4. ZARZĄDZANIE PRZEWOŹNIKAMI (Carrier Management)#

    Konfiguracja przewoźników:
    Dane podstawowe: nazwa, symbol, logo
    Integracje API z systemami przewoźników
    Kontrakty i umowy
    Terminy odbioru i deadline'y
    Strefy dostaw i ograniczenia

    5. OPERACJE FINANSOWE (Financial Operations)#

    Zarządzanie finansami:
    Rachunki klientów i salda
    Historia operacji finansowych
    Typy operacji: wpłaty, wypłaty, prowizje
    Płatności online i tradycyjne
    Faktury i dokumenty
    Eksport do Symfonii

    🎨 CHARAKTERYSTYKA INTERFEJSU#

    Nawigacja i UX:#

    Menu boczne z głównymi modułami
    Breadcrumbs z nawigacją
    Filtry zaawansowane w każdej liście
    Wyszukiwanie z autouzupełnianiem
    Paginacja i sortowanie
    Akcje masowe (batch operations)

    Wizualne wskaźniki:#

    Kolorowe statusy zamówień:
    �� Zielony - Nowe zamówienie
    �� Żółty - W trakcie/Transit
    🔵 Niebieski - Dostarczone
    🔴 Czerwony - Anulowane
    Badges i ikony dla szybkiej identyfikacji
    Alerty i powiadomienia
    Potwierdzenia dla krytycznych akcji

    Funkcje zaawansowane:#

    Eksport danych (Excel, CSV)
    Import danych masowych
    Raporty i statystyki
    Integracje z zewnętrznymi systemami
    API dla automatyzacji

    �� SYSTEM UPRAWNIEŃ#

    Role użytkowników:
    ROLE_USER_CREATE - tworzenie klientów
    ROLE_USER_EDIT - edycja danych
    ROLE_USER_DELETE - archiwizacja
    ROLE_USER_EXPORT - eksport danych
    ROLE_ORDER_LIST - przeglądanie zamówień
    ROLE_PRODUCT_CREATE - zarządzanie produktami

    📊 DASHBOARD I RAPORTY#

    Główne wskaźniki:
    Liczba zamówień w różnych statusach
    Salda klientów i płatności
    Statystyki produktów i przewoźników
    Alerty i powiadomienia
    Wykresy i analizy

    🔗 INTEGRACJE W INTERFEJSIE#

    Bezpośrednie linki do:
    System Office - edycja zamówień
    Zoho CRM - zarządzanie relacjami
    Symfonia - system finansowy
    API przewoźników - śledzenie przesyłek

    💡 KORZYŚCI BIZNESOWE#

    Dla użytkowników:
    Intuicyjny interfejs - łatwa obsługa
    Szybki dostęp do wszystkich funkcji
    Automatyzacja procesów
    Bezpieczeństwo i kontrola dostępu
    Skalowalność - obsługa wielu klientów
    Dla organizacji:
    Centralizacja zarządzania
    Optymalizacja procesów
    Redukcja błędów ludzkich
    Lepsze raportowanie i analityka
    Integracja z ekosystemem biznesowym
    Interfejs Minotaur jest zaprojektowany jako enterprise solution zapewniający kompleksowe zarządzanie operacjami logistycznymi z naciskiem na wydajność, bezpieczeństwo i łatwość użytkowania.

    User
    Opisz architekturę techniczą, biblioteki, powiążania, przepływy

    Cursor
    Przeanalizuję architekturę techniczną aplikacji Minotaur, badając konfiguracje, zależności i przepływy danych.
    Na podstawie szczegółowej analizy kodu, przedstawiam kompleksowy opis architektury technicznej aplikacji Minotaur:

    🏗️ ARCHITEKTURA TECHNICZNA MINOTAUR#

    🎯 PODSTAWOWA ARCHITEKTURA#

    Framework i Wersje:#

    Symfony 7.0 - główny framework PHP
    PHP 8.2+ - wersja języka
    Clean Architecture - wzorzec architektoniczny
    Domain-Driven Design (DDD) - podejście do projektowania

    Struktura Katalogów:#

    src/
    ├── Application/     # Warstwa aplikacyjna (Use Cases, Services)
    ├── Domain/         # Warstwa domenowa (Entities, Value Objects)
    ├── Infrastructure/ # Warstwa infrastruktury (Repositories, External APIs)
    ├── UI/            # Warstwa prezentacji (Controllers, Forms)
    └── Admin/         # Panele administracyjne Sonaty

    �� GŁÓWNE KOMPONENTY TECHNICZNE#

    1. Baza Danych i ORM#

    Doctrine ORM 3.2 - mapowanie obiektowo-relacyjne
    MySQL - główna baza danych
    MongoDB - baza dokumentowa (dodatkowe dane)
    Doctrine Migrations - zarządzanie schematem
    Redis - cache i sesje

    2. Panel Administracyjny#

    Sonata Admin Bundle 4.35 - interfejs administracyjny
    Sonata Doctrine ORM Admin Bundle - integracja z ORM
    Sonata Doctrine MongoDB Admin Bundle - integracja z MongoDB
    KnpMenuBundle - zarządzanie menu

    3. Frontend i Assets#

    Webpack Encore - bundler JavaScript/CSS
    React 18.2 - komponenty interaktywne
    TypeScript - typowanie JavaScript
    Sass - preprocessor CSS
    Bootstrap - framework CSS
    jQuery - biblioteka JavaScript (legacy)

    4. Komunikacja Asynchroniczna#

    Symfony Messenger - system kolejek
    AMQP - protokół komunikacji
    Redis - transport wiadomości
    Dedicated Queues dla każdego przewoźnika

    �� PRZEPŁYWY DANYCH I KOMUNIKACJA#

    1. Architektura CQRS (Command Query Responsibility Segregation)#

    2. System Wiadomości (Messenger)#

    Konfiguracja kolejek:
    Handlery wiadomości:
    CreateShipmentMessageHandler - tworzenie przesyłek
    TrackingReturnShipmentMessageHandler - śledzenie zwrotów
    WaybillMessageHandler - generowanie listów przewozowych

    3. Integracje Zewnętrzne#

    API Klienci:
    GoogleClient - geolokalizacja
    GusClient - dane firm
    VeisClient - walidacja adresów
    ZohoClient - CRM

    🛡️ BEZPIECZEŃSTWO I AUTORYZACJA#

    1. System Uprawnień#

    2. Firewalls#

    API - token-based authentication
    Admin - form-based authentication
    Remember Me - długoterminowe sesje

    3. Autentykatory#

    ApiKeyAuthenticator - API tokens
    EmailAuthenticator - email-based auth
    AdminLoginAuthenticator - panel admin

    �� KONTENERYZACJA I DEPLOYMENT#

    1. Docker Architecture#

    2. Środowiska#

    Development - hot reload, debug
    Staging - testy integracyjne
    Production - optymalizacje, cache

    3. CI/CD Pipeline (GitLab)#

    �� MONITORING I LOGOWANIE#

    1. Logowanie#

    Monolog Bundle - strukturalne logi
    Redelivery Logger - śledzenie wiadomości
    Application Logs - logi aplikacji

    2. Cache Strategy#

    �� INTEGRACJE ZEWNĘTRZNE#

    1. Przewoźnicy (Carriers)#

    DPD, DHL, inPost, GLS - API integracje
    Dedicated Queues - asynchroniczna komunikacja
    Retry Logic - obsługa błędów

    2. Systemy Biznesowe#

    Symfonia - system finansowy
    Zoho CRM - zarządzanie relacjami
    Google Maps - geolokalizacja

    3. Storage#

    Azure Blob Storage - pliki i media
    Flysystem Bundle - abstrakcja storage

    �� TESTING STRATEGY#

    1. Testy Jednostkowe#

    PHPUnit 10.5 - testy jednostkowe
    PhpSpec - BDD testing
    Rector - automatyczne refaktoring

    2. Testy Funkcjonalne#

    Behat - BDD scenarios
    Mink - browser testing
    Selenium - end-to-end testing

    3. Code Quality#

    PHPStan - static analysis
    PHP CS Fixer - code formatting
    ESLint - JavaScript linting

    📈 PERFORMANCE I OPTYMALIZACJA#

    1. Cache Strategy#

    HTTP Cache - FOSHttpCacheBundle
    Doctrine Cache - query caching
    Redis - session storage

    2. Asset Optimization#

    Webpack Encore - bundling
    Versioning - cache busting
    Source Maps - debugging

    3. Database Optimization#

    Query Optimization - Doctrine DQL
    Indexing - strategiczne indeksy
    Connection Pooling - zarządzanie połączeniami

    �� PRZEPŁYWY BIZNESOWE#

    1. Tworzenie Zamówienia#

    UI Controller → Application Service → Domain Command → 
    Infrastructure Handler → External API → Event Store

    2. Przetwarzanie Płatności#

    Payment Event → Messenger Queue → Payment Handler → 
    Financial Operation → Database Update → Notification

    3. Integracja z Przewoźnikiem#

    Order Created → Carrier Queue → API Call → 
    Response Processing → Status Update → Event Emission

    🎯 KLUCZOWE ZALETY ARCHITEKTURY#

    1.
    Skalowalność - modułowa struktura
    2.
    Testowalność - dependency injection
    3.
    Maintainability - clean architecture
    4.
    Performance - async processing
    5.
    Security - role-based access
    6.
    Flexibility - plugin architecture
    7.
    Monitoring - comprehensive logging
    8.
    Deployment - containerized approach
    Architektura Minotaur reprezentuje nowoczesne podejście do budowy aplikacji enterprise, łącząc najlepsze praktyki z technologiami, które zapewniają wysoką wydajność, bezpieczeństwo i łatwość utrzymania.
    src/
    ├── Application/     # Warstwa aplikacyjna (Use Cases, Services)
    ├── Domain/         # Warstwa domenowa (Entities, Value Objects)
    ├── Infrastructure/ # Warstwa infrastruktury (Repositories, External APIs)
    ├── UI/            # Warstwa prezentacji (Controllers, Forms)
    └── Admin/         # Panele administracyjne Sonaty
    UI Controller → Application Service → Domain Command → 
    Infrastructure Handler → External API → Event Store
    Payment Event → Messenger Queue → Payment Handler → 
    Financial Operation → Database Update → Notification
    Order Created → Carrier Queue → API Call → 
    Response Processing → Status Update → Event Emission

    User
    minotaur ma bezposrednie polaczenie do przewoznikow?

    Cursor
    Przeanalizuję bezpośrednie połączenia Minotaur z przewoźnikami, badając konfiguracje integracji i handlery wiadomości.
    Na podstawie szczegółowej analizy kodu, mogę odpowiedzieć na pytanie o bezpośrednie połączenia Minotaur z przewoźnikami:

    🔗 POŁĄCZENIA MINOTAUR Z PRZEWOŹNIKAMI#

    ❌ NIE - Minotaur NIE ma bezpośrednich połączeń do przewoźników#

    🏗️ ARCHITEKTURA INTEGRACJI#

    1. Pośrednia Integracja przez Backend API#

    Minotaur komunikuje się z przewoźnikami pośrednio przez dedykowany Backend API:

    2. Konfiguracja Backend API#

    �� PRZEPŁYW KOMUNIKACJI#

    Minotaur → Backend API → Przewoźnik API
        ↓           ↓           ↓
      Panel    Bridge/Order   DHL/DPD/inPost
    Admin     Service        etc.

    �� SZCZEGӣY INTEGRACJI#

    1. Wiadomości do Przewoźników#

    Minotaur wysyła wiadomości przez system kolejek:

    2. Konfiguracja Integracji#

    3. System Kolejek#

    🎯 ZALETY TAKIEJ ARCHITEKTURY#

    1. Separacja Odpowiedzialności#

    Minotaur - panel administracyjny i zarządzanie
    Backend API - integracje z przewoźnikami
    Przewoźnicy - usługi transportowe

    2. Skalowalność#

    Łatwe dodawanie nowych przewoźników
    Niezależne skalowanie komponentów
    Izolacja błędów

    3. Bezpieczeństwo#

    Centralne zarządzanie API keys
    Walidacja danych w Backend API
    Kontrola dostępu

    4. Elastyczność#

    Możliwość testowania z mock services
    A/B testing różnych integracji
    Graceful degradation

    🔧 IMPLEMENTACJA TECHNICZNA#

    1. OldApiClient#

    2. Mock Services#

    �� PODSUMOWANIE#

    Minotaur to panel administracyjny, który:
    ✅ Zarządza danymi i procesami biznesowymi
    ✅ Wysyła żądania do Backend API
    ✅ Odbiera odpowiedzi i aktualizuje statusy
    ❌ NIE komunikuje się bezpośrednio z API przewoźników
    Backend API to warstwa integracyjna, która:
    ✅ Implementuje bezpośrednie połączenia z przewoźnikami
    ✅ Obsługuje różne protokoły (REST, SOAP, etc.)
    ✅ Zarządza autoryzacją i bezpieczeństwem
    ✅ Przetwarza odpowiedzi i błędy
    Ta architektura zapewnia modularność, bezpieczeństwo i łatwość utrzymania systemu.
    Minotaur → Backend API → Przewoźnik API
        ↓           ↓           ↓
      Panel    Bridge/Order   DHL/DPD/inPost
    Admin     Service        etc.

    User
    Jakie role moga miec uzytkownicy i do czego sluza

    Cursor
    Przeanalizuję system ról użytkowników w aplikacji Minotaur, badając konfiguracje bezpieczeństwa i uprawnienia.
    Na podstawie szczegółowej analizy systemu ról w aplikacji Minotaur, przedstawiam kompleksowy opis ról użytkowników:

    �� SYSTEM RÓL UŻYTKOWNIKÓW W MINOTAUR#

    🏗️ HIERARCHIA RÓL#

    1. Role Główne (Main Roles)#

    2. Role Specjalne#

    �� SZCZEGӣOWE ROLE BIZNESOWE#

    1. ZARZĄDZANIE ZAMÓWIENIAMI (Order Management)#

    2. ZARZĄDZANIE KLIENTAMI (User Management)#

    3. ZARZĄDZANIE PRODUKTAMI (Product Management)#

    4. OPERACJE FINANSOWE (Financial Operations)#

    5. ZARZĄDZANIE PRZEWOŹNIKAMI (Carrier Management)#

    6. GRUPY CENOWE (Price Groups)#

    7. DODATKI I USŁUGI (Addons)#

    �� SPECJALNE ROLE BIZNESOWE#

    1. ROLE_ORDER_LIST_CARRIER#

    Przeznaczenie: Dostęp do zamówień konkretnych przewoźników

    2. ROLE_USER_LOGIN#

    Przeznaczenie: Możliwość logowania jako inny użytkownik
    Używane przez administratorów do pomocy klientom
    Pozwala na impersonation (wcielenie się w rolę klienta)

    3. ROLE_ALLOWED_TO_SWITCH#

    Przeznaczenie: Kontrola funkcji impersonation
    Tylko użytkownicy z tą rolą mogą logować się jako inni użytkownicy
    Bezpieczeństwo - ogranicza dostęp do tej funkcji

    🔧 ROLE TECHNICZNE#

    1. Media Management#

    2. Brand Management#

    3. Integration Management#

    �� INTEGRACJE ZEWNĘTRZNE#

    1. Zoho CRM#

    2. Messaging#

    📊 ROLE RAPORTOWE#

    1. Fuel Surcharge#

    2. Holiday Dates#

    🎯 PRAKTYCZNE ZASTOSOWANIA#

    1. Administrator Systemu (ROLE_SUPER_ADMIN)#

    Pełny dostęp do wszystkich funkcji
    Zarządzanie użytkownikami i uprawnieniami
    Konfiguracja systemu
    Monitoring i raporty

    2. Manager Operacyjny (ROLE_ORDER_ALL + ROLE_USER_ALL)#

    Zarządzanie zamówieniami
    Obsługa klientów
    Monitoring statusów przesyłek
    Rozwiązywanie problemów

    3. Manager Finansowy (ROLE_FINANCIAL_OPERATION_ALL)#

    Zarządzanie płatnościami
    Raporty finansowe
    Kontrola sald klientów
    Eksport danych do Symfonii

    4. Manager Produktów (ROLE_PRODUCT_ALL + ROLE_CARRIER_ALL)#

    Konfiguracja produktów
    Zarządzanie przewoźnikami
    Ustawianie cen
    Konfiguracja dodatków

    5. Przedstawiciel Przewoźnika (ROLE_ORDER_LIST_CARRIER)#

    Dostęp tylko do zamówień swojego przewoźnika
    Monitoring statusów
    Obsługa problemów technicznych

    🔒 BEZPIECZEŃSTWO#

    1. Strategia Decyzyjna#

    2. Kontrola Dostępu#

    Path-based - kontrola dostępu do ścieżek URL
    Method-based - kontrola dostępu do metod
    Entity-based - kontrola dostępu do encji

    3. Audit Trail#

    Logowanie wszystkich działań
    Śledzenie zmian uprawnień
    Historia logowań
    System ról w Minotaur zapewnia granularną kontrolę dostępu i elastyczność w zarządzaniu uprawnieniami użytkowników, umożliwiając precyzyjne dostosowanie dostępu do potrzeb biznesowych organizacji.

    User
    jakie jest wykrozystanie bazy danych. jakie tabele, przeplywy - jakie informacje

    Cursor
    Przeanalizuję wykorzystanie bazy danych w aplikacji Minotaur, badając encje, tabele i przepływy danych.
    Na podstawie szczegółowej analizy kodu, przedstawiam kompleksowy opis wykorzystania bazy danych w aplikacji Minotaur:

    🗄️ WYKORZYSTANIE BAZY DANYCH W MINOTAUR#

    ��️ ARCHITEKTURA BAZY DANYCH#

    1. Technologie#

    MySQL - główna baza danych relacyjna
    MongoDB - baza dokumentowa (dodatkowe dane)
    Redis - cache i sesje
    Doctrine ORM 3.2 - mapowanie obiektowo-relacyjne

    2. Konfiguracja#

    📊 GŁÓWNE TABELE I ENCJE#

    1. ZAMÓWIENIA (Orders)#

    Tabela: moduly_zamowienia
    Kluczowe pola:
    Powiązane tabele:
    order_event - zdarzenia zamówień
    moduly_zamowienia_historia - historia statusów
    order_tracking_history - historia śledzenia
    order_content - zawartość przesyłek
    order_customs - dokumenty celne
    order_photo - zdjęcia przesyłek

    2. KLIENCI (Users)#

    Tabela: moduly_klienci
    Kluczowe pola:
    Indeksy:

    3. PRODUKTY (Products)#

    Tabela: moduly_produkty
    Kluczowe pola:
    Powiązane tabele:
    moduly_produkty_2_dodatki_maska - dodatki produktów
    product_price - ceny produktów
    product_label - etykiety produktów

    4. PRZEWOŹNICY (Carriers)#

    Tabela: moduly_producenci
    Kluczowe pola:
    Powiązane tabele:
    integration - konfiguracja integracji
    contract - umowy z przewoźnikami

    5. OPERACJE FINANSOWE (Financial Operations)#

    Tabela: moduly_klienci_rachunek
    Kluczowe pola:

    6. DODATKI (Addons)#

    Tabela: moduly_producenci_dodatki
    Kluczowe pola:
    Powiązane tabele:
    addon_country - kraje dla dodatków
    addon_price - ceny dodatków
    order_addon - dodatki w zamówieniach

    �� PRZEPŁYWY DANYCH#

    1. Tworzenie Zamówienia#

    1. User (klient) → moduly_klienci
    2. Product (produkt) → moduly_produkty
    3. Order (zamówienie) → moduly_zamowienia
    4. OrderAddon (dodatki) → order_addon
    5. OrderEvent (zdarzenie) → order_event
    6. FinancialOperation (płatność) → moduly_klienci_rachunek

    2. Śledzenie Statusów#

    1. OrderTrackingHistory → moduly_zamowienia_historia
    2. OrderEvent → order_event
    3. Status update → moduly_zamowienia.status

    3. Zarządzanie Finansami#

    1. FinancialOperation → moduly_klienci_rachunek
    2. Payment history → moduly_klienci_rachunek
    3. Balance calculation → SUM(kwota) WHERE status = 'Zrealizowana'

    �� RELACJE I POWIĄZANIA#

    1. Hierarchia Klientów#

    2. Produkty i Przewoźnicy#

    3. Zamówienia i Klienci#

    4. Dodatki i Produkty#

    🎯 SPECJALNE FUNKCJE BAZY DANYCH#

    1. Funkcje JSON#

    2. Funkcje Datetime#

    3. Custom Types#

    📊 OPTYMALIZACJA I CACHE#

    1. Cache Strategy#

    2. Indeksy#

    🔍 ZAPYTANIA I RAPORTY#

    1. Saldo Klienta#

    2. Historia Zamówień#

    3. Statystyki Produktów#

    🛡️ BEZPIECZEŃSTWO DANYCH#

    1. Walidacja#

    Unique constraints - unikalność kluczowych pól
    Foreign keys - integralność referencyjna
    Enum types - ograniczenie wartości

    2. Backup i Recovery#

    Regularne backupy - codzienne kopie zapasowe
    Point-in-time recovery - możliwość przywrócenia do określonego momentu
    Transaction logs - logi transakcji

    �� MONITORING I METRYKI#

    1. Wydajność#

    Query performance - monitorowanie wolnych zapytań
    Connection pooling - zarządzanie połączeniami
    Index usage - wykorzystanie indeksów

    2. Wolumen Danych#

    Orders - ~1M+ zamówień rocznie
    Users - ~10K+ klientów
    Financial operations - ~2M+ operacji rocznie
    Tracking history - ~5M+ wpisów rocznie
    Baza danych Minotaur jest zaprojektowana jako enterprise solution z naciskiem na wydajność, skalowalność i bezpieczeństwo, obsługująca kompleksowe procesy logistyczne z pełną historią i audytem wszystkich operacji.
    1. User (klient) → moduly_klienci
    2. Product (produkt) → moduly_produkty
    3. Order (zamówienie) → moduly_zamowienia
    4. OrderAddon (dodatki) → order_addon
    5. OrderEvent (zdarzenie) → order_event
    6. FinancialOperation (płatność) → moduly_klienci_rachunek
    1. OrderTrackingHistory → moduly_zamowienia_historia
    2. OrderEvent → order_event
    3. Status update → moduly_zamowienia.status
    1. FinancialOperation → moduly_klienci_rachunek
    2. Payment history → moduly_klienci_rachunek
    3. Balance calculation → SUM(kwota) WHERE status = 'Zrealizowana'

    User
    do czego wykorzystywany jest redis i mongodb

    Cursor
    Przeanalizuję wykorzystanie Redis i MongoDB w aplikacji Minotaur, badając konfiguracje i implementacje.
    Na podstawie szczegółowej analizy kodu, przedstawiam kompleksowy opis wykorzystania Redis i MongoDB w aplikacji Minotaur:

    🗄️ WYKORZYSTANIE REDIS I MONGODB W MINOTAUR#

    🔴 REDIS - WYKORZYSTANIE#

    1. Sesje Użytkowników#

    Przeznaczenie:
    Przechowywanie sesji użytkowników
    Sesje administracyjne - panel Sonata Admin
    Sesje API - autoryzacja tokenów
    Remember Me - długoterminowe sesje

    2. Cache System#

    Przeznaczenie:
    Doctrine Cache - cache zapytań ORM
    HTTP Cache - cache odpowiedzi API
    System Cache - cache metadanych
    Result Cache - cache wyników zapytań

    3. Konfiguracja Redis#

    Parametry:
    Retry interval - 2 sekundy
    Timeout - 10 sekund
    Connection pooling - zarządzanie połączeniami

    4. HTTP Cache Rules#

    Zasady cache:
    Lista zamówień - 60 sekund
    Dashboard - 15 sekund
    Public cache - współdzielony między użytkownikami

    🟢 MONGODB - WYKORZYSTANIE#

    1. Konfiguracja MongoDB#

    2. Kolekcje MongoDB#

    A. Events (Zdarzenia)#
    Przeznaczenie:
    Audit trail - śledzenie wszystkich zdarzeń
    Event sourcing - historia zmian
    Monitoring - aktywność użytkowników
    Debugging - analiza problemów
    B. Invoices (Faktury)#
    Przeznaczenie:
    Dokumenty faktur - pełne dane faktur
    Embedded documents - zagnieżdżone struktury
    Flexible schema - elastyczna struktura danych
    Historical data - archiwum faktur
    C. Trade Documents (Dokumenty Handlowe)#
    Przeznaczenie:
    Dokumenty celne - import/export
    Read-only collection - tylko odczyt
    Unique indexes - unikalne ścieżki
    Content storage - przechowywanie treści
    D. Duplicate Processor (Przetwarzanie Duplikatów)#
    Przeznaczenie:
    Deduplikacja wiadomości - unikanie duplikatów
    Queue management - zarządzanie kolejkami
    Hash tracking - śledzenie hashów wiadomości
    Performance optimization - optymalizacja wydajności
    E. Customs Declaration Config (Konfiguracja Celna)#
    Przeznaczenie:
    Konfiguracja celna - ustawienia deklaracji
    Field validation - walidacja pól
    Country-specific rules - reguły krajowe
    Dynamic configuration - dynamiczna konfiguracja

    🎯 ARCHITEKTURA HYBRYDOWA#

    1. Podział Zadań#

    MySQL (Główne dane):
    Zamówienia - core business data
    Klienci - user management
    Produkty - product catalog
    Operacje finansowe - financial transactions
    MongoDB (Dodatkowe dane):
    Events - audit trail
    Invoices - document storage
    Trade documents - customs data
    Configuration - dynamic config
    Redis (Cache & Sessions):
    Sessions - user sessions
    Cache - performance optimization
    HTTP cache - response caching

    2. Przepływy Danych#

    MySQL (Core Data) ←→ MongoDB (Documents) ←→ Redis (Cache)
         ↓                    ↓                    ↓
      Orders, Users      Events, Invoices     Sessions, Cache
      Products, etc.     Trade Documents      HTTP Responses

    3. Optymalizacja Wydajności#

    Redis:
    Session sharing - współdzielenie sesji między serwerami
    Query caching - cache zapytań Doctrine
    Response caching - cache odpowiedzi API
    Rate limiting - ograniczanie liczby żądań
    MongoDB:
    Document flexibility - elastyczna struktura dokumentów
    Horizontal scaling - skalowanie poziome
    Read performance - wydajność odczytu
    Historical data - dane historyczne

    �� KONFIGURACJA ŚRODOWISK#

    1. Development#

    2. Production#

    �� MONITORING I METRYKI#

    1. Redis Metrics#

    Memory usage - wykorzystanie pamięci
    Connection count - liczba połączeń
    Cache hit ratio - współczynnik trafień cache
    Session count - liczba aktywnych sesji

    2. MongoDB Metrics#

    Document count - liczba dokumentów
    Query performance - wydajność zapytań
    Index usage - wykorzystanie indeksów
    Storage usage - wykorzystanie przestrzeni

    🛡️ BEZPIECZEŃSTWO#

    1. Redis Security#

    Password protection - ochrona hasłem
    Network isolation - izolacja sieciowa
    Connection limits - limity połączeń
    Data encryption - szyfrowanie danych

    2. MongoDB Security#

    Authentication - uwierzytelnianie
    Authorization - autoryzacja
    Network security - bezpieczeństwo sieci
    Data validation - walidacja danych

    �� KORZYŚCI ARCHITEKTURY#

    1. Redis#

    Wysoka wydajność - szybki dostęp do danych
    Skalowalność - łatwe skalowanie
    Reliability - niezawodność
    Flexibility - elastyczność

    2. MongoDB#

    Schema flexibility - elastyczność schematu
    Horizontal scaling - skalowanie poziome
    Document storage - przechowywanie dokumentów
    Query flexibility - elastyczność zapytań
    Architektura hybrydowa Minotaur zapewnia optymalną wydajność, skalowalność i elastyczność poprzez wykorzystanie najlepszych cech każdej technologii bazodanowej.
    MySQL (Core Data) ←→ MongoDB (Documents) ←→ Redis (Cache)
         ↓                    ↓                    ↓
      Orders, Users      Events, Invoices     Sessions, Cache
      Products, etc.     Trade Documents      HTTP Responses

    User
    a rabbit?

    Cursor
    Przeanalizuję wykorzystanie RabbitMQ w aplikacji Minotaur, badając konfiguracje i implementacje systemu wiadomości.
    Na podstawie szczegółowej analizy kodu, przedstawiam kompleksowy opis wykorzystania RabbitMQ w aplikacji Minotaur:

    🐰 WYKORZYSTANIE RABBITMQ W MINOTAUR#

    �� GŁÓWNE PRZEZNACZENIE#

    RabbitMQ w Minotaur służy jako system komunikacji asynchronicznej między różnymi komponentami systemu logistycznego, szczególnie w kontekście integracji z przewoźnikami.

    🏗️ ARCHITEKTURA MESSENGER#

    1. Konfiguracja Transportu#

    2. Zmienna Środowiskowa#

    📨 TYPY WIADOMOŚCI I KOLEJEK#

    1. Wiadomości Przewoźników (Carrier Messages)#

    A. Tworzenie Przesyłek (Create Shipment)
    B. Śledzenie Przesyłek (Tracking)
    C. Zwroty Przesyłek (Returns)

    2. Wiadomości Biznesowe#

    A. Sprawdzanie Statusu Firmy
    B. Limity Kredytowe Użytkowników

    🏢 SUPPORTED CARRIERS (25+ PRZEWOŹNIKÓW)#

    🔄 PRZEPŁYW PRZETWARZANIA WIADOMOŚCI#

    1. Tworzenie Przesyłki#

    2. Logika Ponownych Prób#

    Automatyczne ponowne próby dla nieopłaconych zamówień
    Opóźnienie 30 sekund między próbami
    Sprawdzanie limitu czasowego wiadomości

    🛠️ IMPLEMENTACJA TECHNICZNA#

    1. Biblioteki#

    {
      "symfony/amqp-messenger": "^7.0",
      "php-amqplib/php-amqplib": "^3.7"
    }

    2. Struktura Wiadomości#

    3. Handlery Wiadomości#

    CreateShipmentMessageHandler - tworzenie przesyłek
    TrackingReturnShipmentMessageHandler - śledzenie zwrotów
    CreateReturnShipmentMessageHandler - tworzenie zwrotów
    EventStoreMessageHandler - zapisywanie zdarzeń
    WaybillMessageHandler - obsługa listów przewozowych

    🎯 KORZYŚCI BIZNESOWE#

    1. Asynchroniczność#

    Nieblokujące operacje - system nie czeka na odpowiedź przewoźnika
    Skalowalność - możliwość przetwarzania wielu wiadomości równolegle

    2. Niezawodność#

    Persystencja wiadomości - wiadomości nie giną przy awarii
    Ponowne próby - automatyczne retry dla nieudanych operacji
    Dead Letter Queue - obsługa wiadomości, których nie można przetworzyć

    3. Izolacja#

    Separacja odpowiedzialności - każdy przewoźnik ma własną kolejkę
    Fault tolerance - awaria jednego przewoźnika nie wpływa na inne

    🔧 MONITORING I DEBUGGING#

    1. Logowanie#

    2. Tryb Testowy#

    �� PODSUMOWANIE#

    RabbitMQ w Minotaur pełni kluczową rolę jako orchestrator komunikacji asynchronicznej między systemem a przewoźnikami, zapewniając:
    25+ integracji z różnymi przewoźnikami
    Asynchroniczne przetwarzanie operacji logistycznych
    Niezawodność i odporność na awarie
    Skalowalność systemu
    Izolację komponentów
    Jest to rdzeń architektury komunikacyjnej systemu logistycznego Globkurier.
    {
      "symfony/amqp-messenger": "^7.0",
      "php-amqplib/php-amqplib": "^3.7"
    }

    User
    wygeneruj mi diagram (svg) komponentow

    Cursor
    Wygeneruję diagram komponentów aplikacji Minotaur w formacie SVG, przedstawiający architekturę systemu i powiązania między komponentami.
    <svg width="1200" height="800" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .component { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .database { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .queue { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .external { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .ui { fill: #27ae60; stroke: #229954; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="600" y="30" text-anchor="middle" class="title">Minotaur - Architektura Komponentów</text>
    
      <!-- Frontend Layer -->
      <rect x="50" y="60" width="200" height="80" rx="10" class="ui"/>
      <text x="150" y="85" text-anchor="middle" class="subtitle">Frontend</text>
      <text x="150" y="105" text-anchor="middle" class="label">Sonata Admin Panel</text>
      <text x="150" y="120" text-anchor="middle" class="label">Twig Templates</text>
      <text x="150" y="135" text-anchor="middle" class="label">JavaScript/Webpack</text>
    
      <!-- UI Controllers -->
      <rect x="50" y="160" width="200" height="60" rx="10" class="ui"/>
      <text x="150" y="180" text-anchor="middle" class="subtitle">UI Controllers</text>
      <text x="150" y="200" text-anchor="middle" class="label">Order, User, Product</text>
    
      <!-- Admin Layer -->
      <rect x="50" y="240" width="200" height="80" rx="10" class="ui"/>
      <text x="150" y="265" text-anchor="middle" class="subtitle">Admin Panels</text>
      <text x="150" y="285" text-anchor="middle" class="label">Sonata Admin</text>
      <text x="150" y="300" text-anchor="middle" class="label">CRUD Operations</text>
      <text x="150" y="315" text-anchor="middle" class="label">Custom Actions</text>
    
      <!-- Application Layer -->
      <rect x="300" y="60" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="85" text-anchor="middle" class="subtitle">Application Layer</text>
      <text x="400" y="105" text-anchor="middle" class="label">Use Cases</text>
      <text x="400" y="120" text-anchor="middle" class="label">Command/Query Bus</text>
      <text x="400" y="135" text-anchor="middle" class="label">Services</text>
      <text x="400" y="150" text-anchor="middle" class="label">Event Handlers</text>
      <text x="400" y="165" text-anchor="middle" class="label">API Controllers</text>
    
      <!-- Domain Layer -->
      <rect x="300" y="200" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="225" text-anchor="middle" class="subtitle">Domain Layer</text>
      <text x="400" y="245" text-anchor="middle" class="label">Entities</text>
      <text x="400" y="260" text-anchor="middle" class="label">Value Objects</text>
      <text x="400" y="275" text-anchor="middle" class="label">Domain Services</text>
      <text x="400" y="290" text-anchor="middle" class="label">Repositories</text>
      <text x="400" y="305" text-anchor="middle" class="label">Domain Events</text>
    
      <!-- Infrastructure Layer -->
      <rect x="300" y="340" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="365" text-anchor="middle" class="subtitle">Infrastructure</text>
      <text x="400" y="385" text-anchor="middle" class="label">External APIs</text>
      <text x="400" y="400" text-anchor="middle" class="label">Messenger Handlers</text>
      <text x="400" y="415" text-anchor="middle" class="label">Repositories Impl</text>
      <text x="400" y="430" text-anchor="middle" class="label">Event Store</text>
      <text x="400" y="445" text-anchor="middle" class="label">File Storage</text>
    
      <!-- Databases -->
      <rect x="550" y="60" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="85" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="625" y="105" text-anchor="middle" class="label">Orders, Users, Products</text>
    
      <rect x="550" y="140" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="165" text-anchor="middle" class="subtitle">MongoDB</text>
      <text x="625" y="185" text-anchor="middle" class="label">Documents, Events</text>
    
      <rect x="550" y="220" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="245" text-anchor="middle" class="subtitle">Redis</text>
      <text x="625" y="265" text-anchor="middle" class="label">Cache, Sessions</text>
    
      <!-- RabbitMQ -->
      <rect x="550" y="300" width="150" height="80" rx="10" class="queue"/>
      <text x="625" y="325" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="625" y="345" text-anchor="middle" class="label">25+ Carrier Queues</text>
      <text x="625" y="360" text-anchor="middle" class="label">Business Messages</text>
      <text x="625" y="375" text-anchor="middle" class="label">Event Store</text>
    
      <!-- External Systems -->
      <rect x="750" y="60" width="200" height="80" rx="10" class="external"/>
      <text x="850" y="85" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="850" y="105" text-anchor="middle" class="label">Bridge to Carriers</text>
      <text x="850" y="120" text-anchor="middle" class="label">Order Processing</text>
      <text x="850" y="135" text-anchor="middle" class="label">Integration Hub</text>
    
      <!-- Carriers -->
      <rect x="750" y="160" width="200" height="120" rx="10" class="external"/>
      <text x="850" y="185" text-anchor="middle" class="subtitle">Carriers (25+)</text>
      <text x="850" y="205" text-anchor="middle" class="label">DHL, DPD, InPost</text>
      <text x="850" y="220" text-anchor="middle" class="label">FedEx, UPS, GLS</text>
      <text x="850" y="235" text-anchor="middle" class="label">Poczta Polska</text>
      <text x="850" y="250" text-anchor="middle" class="label">Raben, Rhenus</text>
      <text x="850" y="265" text-anchor="middle" class="label">And many more...</text>
    
      <!-- External APIs -->
      <rect x="750" y="300" width="200" height="80" rx="10" class="external"/>
      <text x="850" y="325" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="850" y="345" text-anchor="middle" class="label">Google Maps</text>
      <text x="850" y="360" text-anchor="middle" class="label">GUS, VEIS</text>
      <text x="850" y="375" text-anchor="middle" class="label">Zoho CRM</text>
    
      <!-- Arrows - Frontend to Application -->
      <line x1="250" y1="100" x2="300" y2="120" class="arrow"/>
      <line x1="250" y1="190" x2="300" y2="120" class="arrow"/>
      <line x1="250" y1="280" x2="300" y2="120" class="arrow"/>
    
      <!-- Arrows - Application to Domain -->
      <line x1="400" y1="180" x2="400" y2="200" class="arrow"/>
    
      <!-- Arrows - Domain to Infrastructure -->
      <line x1="400" y1="320" x2="400" y2="340" class="arrow"/>
    
      <!-- Arrows - Infrastructure to Databases -->
      <line x1="500" y1="400" x2="550" y2="90" class="arrow"/>
      <line x1="500" y1="400" x2="550" y2="170" class="arrow"/>
      <line x1="500" y1="400" x2="550" y2="250" class="arrow"/>
    
      <!-- Arrows - Infrastructure to RabbitMQ -->
      <line x1="500" y1="400" x2="550" y2="340" class="arrow"/>
    
      <!-- Arrows - Infrastructure to External -->
      <line x1="500" y1="400" x2="750" y2="100" class="arrow"/>
      <line x1="500" y1="400" x2="750" y2="220" class="arrow"/>
      <line x1="500" y1="400" x2="750" y2="340" class="arrow"/>
    
      <!-- Arrows - RabbitMQ to Backend API -->
      <line x1="700" y1="340" x2="750" y2="100" class="arrow" class="dashed"/>
    
      <!-- Arrows - Backend API to Carriers -->
      <line x1="850" y1="140" x2="850" y2="160" class="arrow"/>
    
      <!-- Layer Labels -->
      <text x="50" y="50" class="subtitle" fill="#27ae60">Presentation Layer</text>
      <text x="300" y="50" class="subtitle" fill="#3498db">Application Layer</text>
      <text x="300" y="190" class="subtitle" fill="#3498db">Domain Layer</text>
      <text x="300" y="330" class="subtitle" fill="#3498db">Infrastructure Layer</text>
      <text x="550" y="50" class="subtitle" fill="#e74c3c">Data Layer</text>
      <text x="750" y="50" class="subtitle" fill="#9b59b6">External Systems</text>
    
      <!-- Legend -->
      <rect x="50" y="480" width="20" height="20" class="ui"/>
      <text x="80" y="495" class="label">UI Components</text>
      
      <rect x="50" y="510" width="20" height="20" class="component"/>
      <text x="80" y="525" class="label">Business Logic</text>
      
      <rect x="50" y="540" width="20" height="20" class="database"/>
      <text x="80" y="555" class="label">Databases</text>
      
      <rect x="50" y="570" width="20" height="20" class="queue"/>
      <text x="80" y="585" class="label">Message Queues</text>
      
      <rect x="50" y="600" width="20" height="20" class="external"/>
      <text x="80" y="615" class="label">External Systems</text>
    
      <!-- Clean Architecture Flow -->
      <text x="600" y="680" text-anchor="middle" class="subtitle">Clean Architecture Flow</text>
      <text x="600" y="700" text-anchor="middle" class="label">Dependencies flow inward - Domain has no external dependencies</text>
      <text x="600" y="715" text-anchor="middle" class="label">Infrastructure implements Domain interfaces</text>
      <text x="600" y="730" text-anchor="middle" class="label">Application orchestrates Domain and Infrastructure</text>
      <text x="600" y="745" text-anchor="middle" class="label">Presentation depends on Application</text>
      <text x="600" y="760" text-anchor="middle" class="label">Asynchronous communication via RabbitMQ</text>
    </svg>
    Ten diagram przedstawia:

    ��️ ARCHITEKTURA KOMPONENTÓW MINOTAUR#

    Warstwy Architektury:#

    1.
    Presentation Layer (Zielony)
    Frontend (Sonata Admin Panel)
    UI Controllers
    Admin Panels
    2.
    Application Layer (Niebieski)
    Use Cases
    Command/Query Bus
    Services
    Event Handlers
    API Controllers
    3.
    Domain Layer (Niebieski)
    Entities
    Value Objects
    Domain Services
    Repositories
    Domain Events
    4.
    Infrastructure Layer (Niebieski)
    External APIs
    Messenger Handlers
    Repository Implementations
    Event Store
    File Storage
    5.
    Data Layer (Czerwony)
    MySQL (Orders, Users, Products)
    MongoDB (Documents, Events)
    Redis (Cache, Sessions)
    RabbitMQ (25+ Carrier Queues)
    6.
    External Systems (Fioletowy)
    Backend API (Bridge to Carriers)
    Carriers (25+ przewoźników)
    External APIs (Google Maps, GUS, VEIS, Zoho CRM)

    Kluczowe Przepływy:#

    Stałe strzałki - synchroniczne wywołania
    Przerywane strzałki - asynchroniczna komunikacja przez RabbitMQ
    Clean Architecture - zależności płyną do wewnątrz
    Izolacja domeny - Domain Layer nie ma zależności zewnętrznych
    Diagram pokazuje kompleksową architekturę systemu logistycznego z separacją odpowiedzialności i asynchroniczną komunikacją.
    <svg width="1200" height="800" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .component { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .database { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .queue { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .external { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .ui { fill: #27ae60; stroke: #229954; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="600" y="30" text-anchor="middle" class="title">Minotaur - Architektura Komponentów</text>
    
      <!-- Frontend Layer -->
      <rect x="50" y="60" width="200" height="80" rx="10" class="ui"/>
      <text x="150" y="85" text-anchor="middle" class="subtitle">Frontend</text>
      <text x="150" y="105" text-anchor="middle" class="label">Sonata Admin Panel</text>
      <text x="150" y="120" text-anchor="middle" class="label">Twig Templates</text>
      <text x="150" y="135" text-anchor="middle" class="label">JavaScript/Webpack</text>
    
      <!-- UI Controllers -->
      <rect x="50" y="160" width="200" height="60" rx="10" class="ui"/>
      <text x="150" y="180" text-anchor="middle" class="subtitle">UI Controllers</text>
      <text x="150" y="200" text-anchor="middle" class="label">Order, User, Product</text>
    
      <!-- Admin Layer -->
      <rect x="50" y="240" width="200" height="80" rx="10" class="ui"/>
      <text x="150" y="265" text-anchor="middle" class="subtitle">Admin Panels</text>
      <text x="150" y="285" text-anchor="middle" class="label">Sonata Admin</text>
      <text x="150" y="300" text-anchor="middle" class="label">CRUD Operations</text>
      <text x="150" y="315" text-anchor="middle" class="label">Custom Actions</text>
    
      <!-- Application Layer -->
      <rect x="300" y="60" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="85" text-anchor="middle" class="subtitle">Application Layer</text>
      <text x="400" y="105" text-anchor="middle" class="label">Use Cases</text>
      <text x="400" y="120" text-anchor="middle" class="label">Command/Query Bus</text>
      <text x="400" y="135" text-anchor="middle" class="label">Services</text>
      <text x="400" y="150" text-anchor="middle" class="label">Event Handlers</text>
      <text x="400" y="165" text-anchor="middle" class="label">API Controllers</text>
    
      <!-- Domain Layer -->
      <rect x="300" y="200" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="225" text-anchor="middle" class="subtitle">Domain Layer</text>
      <text x="400" y="245" text-anchor="middle" class="label">Entities</text>
      <text x="400" y="260" text-anchor="middle" class="label">Value Objects</text>
      <text x="400" y="275" text-anchor="middle" class="label">Domain Services</text>
      <text x="400" y="290" text-anchor="middle" class="label">Repositories</text>
      <text x="400" y="305" text-anchor="middle" class="label">Domain Events</text>
    
      <!-- Infrastructure Layer -->
      <rect x="300" y="340" width="200" height="120" rx="10" class="component"/>
      <text x="400" y="365" text-anchor="middle" class="subtitle">Infrastructure</text>
      <text x="400" y="385" text-anchor="middle" class="label">External APIs</text>
      <text x="400" y="400" text-anchor="middle" class="label">Messenger Handlers</text>
      <text x="400" y="415" text-anchor="middle" class="label">Repositories Impl</text>
      <text x="400" y="430" text-anchor="middle" class="label">Event Store</text>
      <text x="400" y="445" text-anchor="middle" class="label">File Storage</text>
    
      <!-- Databases -->
      <rect x="550" y="60" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="85" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="625" y="105" text-anchor="middle" class="label">Orders, Users, Products</text>
    
      <rect x="550" y="140" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="165" text-anchor="middle" class="subtitle">MongoDB</text>
      <text x="625" y="185" text-anchor="middle" class="label">Documents, Events</text>
    
      <rect x="550" y="220" width="150" height="60" rx="10" class="database"/>
      <text x="625" y="245" text-anchor="middle" class="subtitle">Redis</text>
      <text x="625" y="265" text-anchor="middle" class="label">Cache, Sessions</text>
    
      <!-- RabbitMQ -->
      <rect x="550" y="300" width="150" height="80" rx="10" class="queue"/>
      <text x="625" y="325" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="625" y="345" text-anchor="middle" class="label">25+ Carrier Queues</text>
      <text x="625" y="360" text-anchor="middle" class="label">Business Messages</text>
      <text x="625" y="375" text-anchor="middle" class="label">Event Store</text>
    
      <!-- External Systems -->
      <rect x="750" y="60" width="200" height="80" rx="10" class="external"/>
      <text x="850" y="85" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="850" y="105" text-anchor="middle" class="label">Bridge to Carriers</text>
      <text x="850" y="120" text-anchor="middle" class="label">Order Processing</text>
      <text x="850" y="135" text-anchor="middle" class="label">Integration Hub</text>
    
      <!-- Carriers -->
      <rect x="750" y="160" width="200" height="120" rx="10" class="external"/>
      <text x="850" y="185" text-anchor="middle" class="subtitle">Carriers (25+)</text>
      <text x="850" y="205" text-anchor="middle" class="label">DHL, DPD, InPost</text>
      <text x="850" y="220" text-anchor="middle" class="label">FedEx, UPS, GLS</text>
      <text x="850" y="235" text-anchor="middle" class="label">Poczta Polska</text>
      <text x="850" y="250" text-anchor="middle" class="label">Raben, Rhenus</text>
      <text x="850" y="265" text-anchor="middle" class="label">And many more...</text>
    
      <!-- External APIs -->
      <rect x="750" y="300" width="200" height="80" rx="10" class="external"/>
      <text x="850" y="325" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="850" y="345" text-anchor="middle" class="label">Google Maps</text>
      <text x="850" y="360" text-anchor="middle" class="label">GUS, VEIS</text>
      <text x="850" y="375" text-anchor="middle" class="label">Zoho CRM</text>
    
      <!-- Arrows - Frontend to Application -->
      <line x1="250" y1="100" x2="300" y2="120" class="arrow"/>
      <line x1="250" y1="190" x2="300" y2="120" class="arrow"/>
      <line x1="250" y1="280" x2="300" y2="120" class="arrow"/>
    
      <!-- Arrows - Application to Domain -->
      <line x1="400" y1="180" x2="400" y2="200" class="arrow"/>
    
      <!-- Arrows - Domain to Infrastructure -->
      <line x1="400" y1="320" x2="400" y2="340" class="arrow"/>
    
      <!-- Arrows - Infrastructure to Databases -->
      <line x1="500" y1="400" x2="550" y2="90" class="arrow"/>
      <line x1="500" y1="400" x2="550" y2="170" class="arrow"/>
      <line x1="500" y1="400" x2="550" y2="250" class="arrow"/>
    
      <!-- Arrows - Infrastructure to RabbitMQ -->
      <line x1="500" y1="400" x2="550" y2="340" class="arrow"/>
    
      <!-- Arrows - Infrastructure to External -->
      <line x1="500" y1="400" x2="750" y2="100" class="arrow"/>
      <line x1="500" y1="400" x2="750" y2="220" class="arrow"/>
      <line x1="500" y1="400" x2="750" y2="340" class="arrow"/>
    
      <!-- Arrows - RabbitMQ to Backend API -->
      <line x1="700" y1="340" x2="750" y2="100" class="arrow" class="dashed"/>
    
      <!-- Arrows - Backend API to Carriers -->
      <line x1="850" y1="140" x2="850" y2="160" class="arrow"/>
    
      <!-- Layer Labels -->
      <text x="50" y="50" class="subtitle" fill="#27ae60">Presentation Layer</text>
      <text x="300" y="50" class="subtitle" fill="#3498db">Application Layer</text>
      <text x="300" y="190" class="subtitle" fill="#3498db">Domain Layer</text>
      <text x="300" y="330" class="subtitle" fill="#3498db">Infrastructure Layer</text>
      <text x="550" y="50" class="subtitle" fill="#e74c3c">Data Layer</text>
      <text x="750" y="50" class="subtitle" fill="#9b59b6">External Systems</text>
    
      <!-- Legend -->
      <rect x="50" y="480" width="20" height="20" class="ui"/>
      <text x="80" y="495" class="label">UI Components</text>
      
      <rect x="50" y="510" width="20" height="20" class="component"/>
      <text x="80" y="525" class="label">Business Logic</text>
      
      <rect x="50" y="540" width="20" height="20" class="database"/>
      <text x="80" y="555" class="label">Databases</text>
      
      <rect x="50" y="570" width="20" height="20" class="queue"/>
      <text x="80" y="585" class="label">Message Queues</text>
      
      <rect x="50" y="600" width="20" height="20" class="external"/>
      <text x="80" y="615" class="label">External Systems</text>
    
      <!-- Clean Architecture Flow -->
      <text x="600" y="680" text-anchor="middle" class="subtitle">Clean Architecture Flow</text>
      <text x="600" y="700" text-anchor="middle" class="label">Dependencies flow inward - Domain has no external dependencies</text>
      <text x="600" y="715" text-anchor="middle" class="label">Infrastructure implements Domain interfaces</text>
      <text x="600" y="730" text-anchor="middle" class="label">Application orchestrates Domain and Infrastructure</text>
      <text x="600" y="745" text-anchor="middle" class="label">Presentation depends on Application</text>
      <text x="600" y="760" text-anchor="middle" class="label">Asynchronous communication via RabbitMQ</text>
    </svg>

    User
    diagram przeplywu jak svg do zapisu na dysku

    Cursor
    Wygeneruję diagram przepływu procesów biznesowych w aplikacji Minotaur jako plik SVG do zapisu na dysku.
    <svg width="1400" height="1000" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 28px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 18px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 14px; fill: #2c3e50; }
          .small-label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .start-end { fill: #27ae60; stroke: #229954; stroke-width: 3; }
          .process { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .decision { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .queue { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .external { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .database { fill: #95a5a6; stroke: #7f8c8d; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
          .highlight { stroke: #e74c3c; stroke-width: 3; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="700" y="40" text-anchor="middle" class="title">Minotaur - Diagram Przepływu Procesów Biznesowych</text>
    
      <!-- START: User Login -->
      <ellipse cx="100" cy="100" rx="50" ry="30" class="start-end"/>
      <text x="100" y="105" text-anchor="middle" class="subtitle">START</text>
      <text x="100" y="120" text-anchor="middle" class="label">User Login</text>
    
      <!-- Authentication -->
      <rect x="200" y="80" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="95" text-anchor="middle" class="subtitle">Authentication</text>
      <text x="260" y="110" text-anchor="middle" class="label">Role Check</text>
    
      <!-- Decision: Valid User -->
      <polygon points="380,100 400,80 420,100 400,120" class="decision"/>
      <text x="400" y="105" text-anchor="middle" class="label">Valid User?</text>
    
      <!-- Admin Panel Access -->
      <rect x="480" y="80" width="120" height="40" rx="5" class="process"/>
      <text x="540" y="95" text-anchor="middle" class="subtitle">Admin Panel</text>
      <text x="540" y="110" text-anchor="middle" class="label">Sonata Interface</text>
    
      <!-- Decision: Action Type -->
      <polygon points="660,100 680,80 700,100 680,120" class="decision"/>
      <text x="680" y="105" text-anchor="middle" class="label">Action Type?</text>
    
      <!-- Order Management Flow -->
      <rect x="760" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="75" text-anchor="middle" class="subtitle">Order Management</text>
      <text x="820" y="90" text-anchor="middle" class="label">View/Create/Edit</text>
    
      <!-- User Management Flow -->
      <rect x="760" y="120" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="135" text-anchor="middle" class="subtitle">User Management</text>
      <text x="820" y="150" text-anchor="middle" class="label">Customer Data</text>
    
      <!-- Financial Operations Flow -->
      <rect x="760" y="180" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="195" text-anchor="middle" class="subtitle">Financial Ops</text>
      <text x="820" y="210" text-anchor="middle" class="label">Payments/Invoices</text>
    
      <!-- Order Creation Process -->
      <rect x="920" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="980" y="75" text-anchor="middle" class="subtitle">Order Creation</text>
      <text x="980" y="90" text-anchor="middle" class="label">Fill Order Data</text>
    
      <!-- Database: Order Storage -->
      <rect x="1080" y="60" width="100" height="40" rx="5" class="database"/>
      <text x="1130" y="75" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="1130" y="90" text-anchor="middle" class="label">Order Table</text>
    
      <!-- Decision: Payment Required -->
      <polygon points="1220,80 1240,60 1260,80 1240,100" class="decision"/>
      <text x="1240" y="85" text-anchor="middle" class="label">Payment</text>
      <text x="1240" y="95" text-anchor="middle" class="label">Required?</text>
    
      <!-- Payment Processing -->
      <rect x="1300" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="1360" y="75" text-anchor="middle" class="subtitle">Payment</text>
      <text x="1360" y="90" text-anchor="middle" class="label">Processing</text>
    
      <!-- RabbitMQ: Create Shipment Queue -->
      <rect x="920" y="140" width="120" height="40" rx="5" class="queue"/>
      <text x="980" y="155" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="980" y="170" text-anchor="middle" class="label">Create Shipment</text>
    
      <!-- Shipment Creation Handler -->
      <rect x="1080" y="140" width="120" height="40" rx="5" class="process"/>
      <text x="1140" y="155" text-anchor="middle" class="subtitle">Shipment Handler</text>
      <text x="1140" y="170" text-anchor="middle" class="label">Process Order</text>
    
      <!-- Decision: Payment Check -->
      <polygon points="1240,160 1260,140 1280,160 1260,180" class="decision"/>
      <text x="1260" y="165" text-anchor="middle" class="label">Payment</text>
      <text x="1260" y="175" text-anchor="middle" class="label">Complete?</text>
    
      <!-- Retry Queue -->
      <rect x="1300" y="140" width="120" height="40" rx="5" class="queue"/>
      <text x="1360" y="155" text-anchor="middle" class="subtitle">Retry Queue</text>
      <text x="1360" y="170" text-anchor="middle" class="label">30s Delay</text>
    
      <!-- Backend API -->
      <rect x="1080" y="220" width="120" height="40" rx="5" class="external"/>
      <text x="1140" y="235" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="1140" y="250" text-anchor="middle" class="label">Bridge Service</text>
    
      <!-- Carrier Integration -->
      <rect x="1220" y="220" width="120" height="40" rx="5" class="external"/>
      <text x="1280" y="235" text-anchor="middle" class="subtitle">Carrier API</text>
      <text x="1280" y="250" text-anchor="middle" class="label">DHL/DPD/InPost</text>
    
      <!-- Tracking Process -->
      <rect x="920" y="300" width="120" height="40" rx="5" class="process"/>
      <text x="980" y="315" text-anchor="middle" class="subtitle">Tracking</text>
      <text x="980" y="330" text-anchor="middle" class="label">Shipment Status</text>
    
      <!-- Tracking Queue -->
      <rect x="1080" y="300" width="120" height="40" rx="5" class="queue"/>
      <text x="1140" y="315" text-anchor="middle" class="subtitle">Tracking Queue</text>
      <text x="1140" y="330" text-anchor="middle" class="label">Status Updates</text>
    
      <!-- Event Store -->
      <rect x="1220" y="300" width="120" height="40" rx="5" class="database"/>
      <text x="1280" y="315" text-anchor="middle" class="subtitle">Event Store</text>
      <text x="1280" y="330" text-anchor="middle" class="label">MongoDB</text>
    
      <!-- User Management Process -->
      <rect x="200" y="300" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="315" text-anchor="middle" class="subtitle">User Management</text>
      <text x="260" y="330" text-anchor="middle" class="label">CRUD Operations</text>
    
      <!-- User Database -->
      <rect x="360" y="300" width="100" height="40" rx="5" class="database"/>
      <text x="410" y="315" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="410" y="330" text-anchor="middle" class="label">User Table</text>
    
      <!-- Financial Operations -->
      <rect x="200" y="380" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="395" text-anchor="middle" class="subtitle">Financial Ops</text>
      <text x="260" y="410" text-anchor="middle" class="label">Payments/Invoices</text>
    
      <!-- Financial Database -->
      <rect x="360" y="380" width="100" height="40" rx="5" class="database"/>
      <text x="410" y="395" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="410" y="410" text-anchor="middle" class="label">Financial Table</text>
    
      <!-- Redis Cache -->
      <rect x="500" y="380" width="100" height="40" rx="5" class="database"/>
      <text x="550" y="395" text-anchor="middle" class="subtitle">Redis</text>
      <text x="550" y="410" text-anchor="middle" class="label">Cache/Sessions</text>
    
      <!-- External APIs -->
      <rect x="200" y="460" width="120" height="40" rx="5" class="external"/>
      <text x="260" y="475" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="260" y="490" text-anchor="middle" class="label">GUS/VEIS/Google</text>
    
      <!-- Zoho CRM -->
      <rect x="360" y="460" width="100" height="40" rx="5" class="external"/>
      <text x="410" y="475" text-anchor="middle" class="subtitle">Zoho CRM</text>
      <text x="410" y="490" text-anchor="middle" class="label">Customer Data</text>
    
      <!-- END: Process Complete -->
      <ellipse cx="700" cy="600" rx="50" ry="30" class="start-end"/>
      <text x="700" y="605" text-anchor="middle" class="subtitle">END</text>
      <text x="700" y="620" text-anchor="middle" class="label">Process Complete</text>
    
      <!-- ARROWS - Main Flow -->
      <line x1="150" y1="100" x2="200" y2="100" class="arrow"/>
      <line x1="320" y1="100" x2="380" y2="100" class="arrow"/>
      <line x1="420" y1="100" x2="480" y2="100" class="arrow"/>
      <line x1="600" y1="100" x2="660" y2="100" class="arrow"/>
    
      <!-- ARROWS - Action Types -->
      <line x1="680" y1="80" x2="760" y2="80" class="arrow"/>
      <line x1="680" y1="120" x2="760" y2="140" class="arrow"/>
      <line x1="680" y1="140" x2="760" y2="200" class="arrow"/>
    
      <!-- ARROWS - Order Flow -->
      <line x1="880" y1="80" x2="920" y2="80" class="arrow"/>
      <line x1="1040" y1="80" x2="1080" y2="80" class="arrow"/>
      <line x1="1180" y1="80" x2="1220" y2="80" class="arrow"/>
      <line x1="1260" y1="60" x2="1300" y2="80" class="arrow"/>
    
      <!-- ARROWS - Shipment Flow -->
      <line x1="880" y1="160" x2="920" y2="160" class="arrow"/>
      <line x1="1040" y1="160" x2="1080" y2="160" class="arrow"/>
      <line x1="1200" y1="160" x2="1240" y2="160" class="arrow"/>
      <line x1="1260" y1="140" x2="1300" y2="160" class="arrow"/>
    
      <!-- ARROWS - Backend to Carrier -->
      <line x1="1200" y1="240" x2="1220" y2="240" class="arrow"/>
    
      <!-- ARROWS - Tracking Flow -->
      <line x1="880" y1="320" x2="920" y2="320" class="arrow"/>
      <line x1="1040" y1="320" x2="1080" y2="320" class="arrow"/>
      <line x1="1200" y1="320" x2="1220" y2="320" class="arrow"/>
    
      <!-- ARROWS - User Management -->
      <line x1="320" y1="320" x2="360" y2="320" class="arrow"/>
    
      <!-- ARROWS - Financial -->
      <line x1="320" y1="400" x2="360" y2="400" class="arrow"/>
      <line x1="460" y1="400" x2="500" y2="400" class="arrow"/>
    
      <!-- ARROWS - External -->
      <line x1="320" y1="480" x2="360" y2="480" class="arrow"/>
    
      <!-- ARROWS - Return to End -->
      <line x1="650" y1="600" x2="700" y2="600" class="arrow"/>
    
      <!-- Dashed Arrows for Async -->
      <line x1="1300" y1="180" x2="1080" y2="160" class="arrow dashed"/>
      <line x1="1280" y1="260" x2="1080" y2="240" class="arrow dashed"/>
    
      <!-- Process Labels -->
      <text x="50" y="700" class="subtitle">Procesy Biznesowe:</text>
      <text x="50" y="720" class="label">1. Autoryzacja użytkownika i sprawdzenie ról</text>
      <text x="50" y="740" class="label">2. Zarządzanie zamówieniami (CRUD)</text>
      <text x="50" y="760" class="label">3. Tworzenie przesyłek z walidacją płatności</text>
      <text x="50" y="780" class="label">4. Asynchroniczna komunikacja z przewoźnikami</text>
      <text x="50" y="800" class="label">5. Śledzenie statusów przesyłek</text>
      <text x="50" y="820" class="label">6. Zarządzanie klientami i operacjami finansowymi</text>
    
      <text x="600" y="700" class="subtitle">Komponenty Techniczne:</text>
      <text x="600" y="720" class="label">• Sonata Admin Panel - interfejs użytkownika</text>
      <text x="600" y="740" class="label">• Symfony Messenger - system wiadomości</text>
      <text x="600" y="760" class="label">• RabbitMQ - kolejki asynchroniczne</text>
      <text x="600" y="780" class="label">• MySQL - dane biznesowe</text>
      <text x="600" y="800" class="label">• MongoDB - event store</text>
      <text x="600" y="820" class="label">• Redis - cache i sesje</text>
    
      <!-- Color Legend -->
      <rect x="50" y="850" width="20" height="20" class="start-end"/>
      <text x="80" y="865" class="label">Start/End</text>
      
      <rect x="50" y="875" width="20" height="20" class="process"/>
      <text x="80" y="890" class="label">Process</text>
      
      <rect x="50" y="900" width="20" height="20" class="decision"/>
      <text x="80" y="915" class="label">Decision</text>
      
      <rect x="50" y="925" width="20" height="20" class="queue"/>
      <text x="80" y="940" class="label">Queue</text>
      
      <rect x="50" y="950" width="20" height="20" class="database"/>
      <text x="80" y="965" class="label">Database</text>
      
      <rect x="50" y="975" width="20" height="20" class="external"/>
      <text x="80" y="990" class="label">External System</text>
    
      <!-- Flow Types -->
      <text x="600" y="850" class="subtitle">Typy Przepływów:</text>
      <text x="600" y="870" class="label">→ Stała linia - przepływ synchroniczny</text>
      <text x="600" y="890" class="label">⇢ Przerywana linia - przepływ asynchroniczny</text>
      <text x="600" y="910" class="label">◇ Romb - punkt decyzyjny</text>
      <text x="600" y="930" class="label">▭ Prostokąt - proces/operacja</text>
      <text x="600" y="950" class="label">○ Elipsa - start/koniec procesu</text>
    </svg>
    Ten diagram przepływu przedstawia:

    �� DIAGRAM PRZEPŁYWU PROCESÓW BIZNESOWYCH MINOTAUR#

    Główne Przepływy:#

    1.
    Autoryzacja i Dostęp
    Login użytkownika → Sprawdzenie ról → Dostęp do panelu admin
    2.
    Zarządzanie Zamówieniami
    Tworzenie zamówienia → Walidacja płatności → Kolejka RabbitMQ → Przetwarzanie
    3.
    Integracja z Przewoźnikami
    Wiadomość do Backend API → Komunikacja z przewoźnikiem → Aktualizacja statusu
    4.
    Śledzenie Przesyłek
    Kolejka śledzenia → Pobranie statusu → Zapis do Event Store
    5.
    Zarządzanie Użytkownikami
    CRUD operacje → Baza danych MySQL → Cache Redis
    6.
    Operacje Finansowe
    Płatności/faktury → Baza finansowa → Integracja zewnętrzna

    Kluczowe Elementy:#

    Kolorowe komponenty - różne typy elementów systemu
    Strzałki - kierunek przepływu danych
    Przerywane linie - komunikacja asynchroniczna
    Punkty decyzyjne - logika biznesowa
    Kolejki - buforowanie wiadomości

    Zalety Architektury:#

    Asynchroniczność - nieblokujące operacje
    Skalowalność - kolejki RabbitMQ
    Niezawodność - ponowne próby i dead letter queues
    Izolacja - separacja komponentów
    Monitorowanie - event store i logi
    Diagram pokazuje kompleksowy przepływ danych w systemie logistycznym z uwzględnieniem wszystkich warstw architektury.
    <svg width="1400" height="1000" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 28px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 18px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 14px; fill: #2c3e50; }
          .small-label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .start-end { fill: #27ae60; stroke: #229954; stroke-width: 3; }
          .process { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .decision { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .queue { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .external { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .database { fill: #95a5a6; stroke: #7f8c8d; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
          .highlight { stroke: #e74c3c; stroke-width: 3; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="700" y="40" text-anchor="middle" class="title">Minotaur - Diagram Przepływu Procesów Biznesowych</text>
    
      <!-- START: User Login -->
      <ellipse cx="100" cy="100" rx="50" ry="30" class="start-end"/>
      <text x="100" y="105" text-anchor="middle" class="subtitle">START</text>
      <text x="100" y="120" text-anchor="middle" class="label">User Login</text>
    
      <!-- Authentication -->
      <rect x="200" y="80" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="95" text-anchor="middle" class="subtitle">Authentication</text>
      <text x="260" y="110" text-anchor="middle" class="label">Role Check</text>
    
      <!-- Decision: Valid User -->
      <polygon points="380,100 400,80 420,100 400,120" class="decision"/>
      <text x="400" y="105" text-anchor="middle" class="label">Valid User?</text>
    
      <!-- Admin Panel Access -->
      <rect x="480" y="80" width="120" height="40" rx="5" class="process"/>
      <text x="540" y="95" text-anchor="middle" class="subtitle">Admin Panel</text>
      <text x="540" y="110" text-anchor="middle" class="label">Sonata Interface</text>
    
      <!-- Decision: Action Type -->
      <polygon points="660,100 680,80 700,100 680,120" class="decision"/>
      <text x="680" y="105" text-anchor="middle" class="label">Action Type?</text>
    
      <!-- Order Management Flow -->
      <rect x="760" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="75" text-anchor="middle" class="subtitle">Order Management</text>
      <text x="820" y="90" text-anchor="middle" class="label">View/Create/Edit</text>
    
      <!-- User Management Flow -->
      <rect x="760" y="120" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="135" text-anchor="middle" class="subtitle">User Management</text>
      <text x="820" y="150" text-anchor="middle" class="label">Customer Data</text>
    
      <!-- Financial Operations Flow -->
      <rect x="760" y="180" width="120" height="40" rx="5" class="process"/>
      <text x="820" y="195" text-anchor="middle" class="subtitle">Financial Ops</text>
      <text x="820" y="210" text-anchor="middle" class="label">Payments/Invoices</text>
    
      <!-- Order Creation Process -->
      <rect x="920" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="980" y="75" text-anchor="middle" class="subtitle">Order Creation</text>
      <text x="980" y="90" text-anchor="middle" class="label">Fill Order Data</text>
    
      <!-- Database: Order Storage -->
      <rect x="1080" y="60" width="100" height="40" rx="5" class="database"/>
      <text x="1130" y="75" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="1130" y="90" text-anchor="middle" class="label">Order Table</text>
    
      <!-- Decision: Payment Required -->
      <polygon points="1220,80 1240,60 1260,80 1240,100" class="decision"/>
      <text x="1240" y="85" text-anchor="middle" class="label">Payment</text>
      <text x="1240" y="95" text-anchor="middle" class="label">Required?</text>
    
      <!-- Payment Processing -->
      <rect x="1300" y="60" width="120" height="40" rx="5" class="process"/>
      <text x="1360" y="75" text-anchor="middle" class="subtitle">Payment</text>
      <text x="1360" y="90" text-anchor="middle" class="label">Processing</text>
    
      <!-- RabbitMQ: Create Shipment Queue -->
      <rect x="920" y="140" width="120" height="40" rx="5" class="queue"/>
      <text x="980" y="155" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="980" y="170" text-anchor="middle" class="label">Create Shipment</text>
    
      <!-- Shipment Creation Handler -->
      <rect x="1080" y="140" width="120" height="40" rx="5" class="process"/>
      <text x="1140" y="155" text-anchor="middle" class="subtitle">Shipment Handler</text>
      <text x="1140" y="170" text-anchor="middle" class="label">Process Order</text>
    
      <!-- Decision: Payment Check -->
      <polygon points="1240,160 1260,140 1280,160 1260,180" class="decision"/>
      <text x="1260" y="165" text-anchor="middle" class="label">Payment</text>
      <text x="1260" y="175" text-anchor="middle" class="label">Complete?</text>
    
      <!-- Retry Queue -->
      <rect x="1300" y="140" width="120" height="40" rx="5" class="queue"/>
      <text x="1360" y="155" text-anchor="middle" class="subtitle">Retry Queue</text>
      <text x="1360" y="170" text-anchor="middle" class="label">30s Delay</text>
    
      <!-- Backend API -->
      <rect x="1080" y="220" width="120" height="40" rx="5" class="external"/>
      <text x="1140" y="235" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="1140" y="250" text-anchor="middle" class="label">Bridge Service</text>
    
      <!-- Carrier Integration -->
      <rect x="1220" y="220" width="120" height="40" rx="5" class="external"/>
      <text x="1280" y="235" text-anchor="middle" class="subtitle">Carrier API</text>
      <text x="1280" y="250" text-anchor="middle" class="label">DHL/DPD/InPost</text>
    
      <!-- Tracking Process -->
      <rect x="920" y="300" width="120" height="40" rx="5" class="process"/>
      <text x="980" y="315" text-anchor="middle" class="subtitle">Tracking</text>
      <text x="980" y="330" text-anchor="middle" class="label">Shipment Status</text>
    
      <!-- Tracking Queue -->
      <rect x="1080" y="300" width="120" height="40" rx="5" class="queue"/>
      <text x="1140" y="315" text-anchor="middle" class="subtitle">Tracking Queue</text>
      <text x="1140" y="330" text-anchor="middle" class="label">Status Updates</text>
    
      <!-- Event Store -->
      <rect x="1220" y="300" width="120" height="40" rx="5" class="database"/>
      <text x="1280" y="315" text-anchor="middle" class="subtitle">Event Store</text>
      <text x="1280" y="330" text-anchor="middle" class="label">MongoDB</text>
    
      <!-- User Management Process -->
      <rect x="200" y="300" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="315" text-anchor="middle" class="subtitle">User Management</text>
      <text x="260" y="330" text-anchor="middle" class="label">CRUD Operations</text>
    
      <!-- User Database -->
      <rect x="360" y="300" width="100" height="40" rx="5" class="database"/>
      <text x="410" y="315" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="410" y="330" text-anchor="middle" class="label">User Table</text>
    
      <!-- Financial Operations -->
      <rect x="200" y="380" width="120" height="40" rx="5" class="process"/>
      <text x="260" y="395" text-anchor="middle" class="subtitle">Financial Ops</text>
      <text x="260" y="410" text-anchor="middle" class="label">Payments/Invoices</text>
    
      <!-- Financial Database -->
      <rect x="360" y="380" width="100" height="40" rx="5" class="database"/>
      <text x="410" y="395" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="410" y="410" text-anchor="middle" class="label">Financial Table</text>
    
      <!-- Redis Cache -->
      <rect x="500" y="380" width="100" height="40" rx="5" class="database"/>
      <text x="550" y="395" text-anchor="middle" class="subtitle">Redis</text>
      <text x="550" y="410" text-anchor="middle" class="label">Cache/Sessions</text>
    
      <!-- External APIs -->
      <rect x="200" y="460" width="120" height="40" rx="5" class="external"/>
      <text x="260" y="475" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="260" y="490" text-anchor="middle" class="label">GUS/VEIS/Google</text>
    
      <!-- Zoho CRM -->
      <rect x="360" y="460" width="100" height="40" rx="5" class="external"/>
      <text x="410" y="475" text-anchor="middle" class="subtitle">Zoho CRM</text>
      <text x="410" y="490" text-anchor="middle" class="label">Customer Data</text>
    
      <!-- END: Process Complete -->
      <ellipse cx="700" cy="600" rx="50" ry="30" class="start-end"/>
      <text x="700" y="605" text-anchor="middle" class="subtitle">END</text>
      <text x="700" y="620" text-anchor="middle" class="label">Process Complete</text>
    
      <!-- ARROWS - Main Flow -->
      <line x1="150" y1="100" x2="200" y2="100" class="arrow"/>
      <line x1="320" y1="100" x2="380" y2="100" class="arrow"/>
      <line x1="420" y1="100" x2="480" y2="100" class="arrow"/>
      <line x1="600" y1="100" x2="660" y2="100" class="arrow"/>
    
      <!-- ARROWS - Action Types -->
      <line x1="680" y1="80" x2="760" y2="80" class="arrow"/>
      <line x1="680" y1="120" x2="760" y2="140" class="arrow"/>
      <line x1="680" y1="140" x2="760" y2="200" class="arrow"/>
    
      <!-- ARROWS - Order Flow -->
      <line x1="880" y1="80" x2="920" y2="80" class="arrow"/>
      <line x1="1040" y1="80" x2="1080" y2="80" class="arrow"/>
      <line x1="1180" y1="80" x2="1220" y2="80" class="arrow"/>
      <line x1="1260" y1="60" x2="1300" y2="80" class="arrow"/>
    
      <!-- ARROWS - Shipment Flow -->
      <line x1="880" y1="160" x2="920" y2="160" class="arrow"/>
      <line x1="1040" y1="160" x2="1080" y2="160" class="arrow"/>
      <line x1="1200" y1="160" x2="1240" y2="160" class="arrow"/>
      <line x1="1260" y1="140" x2="1300" y2="160" class="arrow"/>
    
      <!-- ARROWS - Backend to Carrier -->
      <line x1="1200" y1="240" x2="1220" y2="240" class="arrow"/>
    
      <!-- ARROWS - Tracking Flow -->
      <line x1="880" y1="320" x2="920" y2="320" class="arrow"/>
      <line x1="1040" y1="320" x2="1080" y2="320" class="arrow"/>
      <line x1="1200" y1="320" x2="1220" y2="320" class="arrow"/>
    
      <!-- ARROWS - User Management -->
      <line x1="320" y1="320" x2="360" y2="320" class="arrow"/>
    
      <!-- ARROWS - Financial -->
      <line x1="320" y1="400" x2="360" y2="400" class="arrow"/>
      <line x1="460" y1="400" x2="500" y2="400" class="arrow"/>
    
      <!-- ARROWS - External -->
      <line x1="320" y1="480" x2="360" y2="480" class="arrow"/>
    
      <!-- ARROWS - Return to End -->
      <line x1="650" y1="600" x2="700" y2="600" class="arrow"/>
    
      <!-- Dashed Arrows for Async -->
      <line x1="1300" y1="180" x2="1080" y2="160" class="arrow dashed"/>
      <line x1="1280" y1="260" x2="1080" y2="240" class="arrow dashed"/>
    
      <!-- Process Labels -->
      <text x="50" y="700" class="subtitle">Procesy Biznesowe:</text>
      <text x="50" y="720" class="label">1. Autoryzacja użytkownika i sprawdzenie ról</text>
      <text x="50" y="740" class="label">2. Zarządzanie zamówieniami (CRUD)</text>
      <text x="50" y="760" class="label">3. Tworzenie przesyłek z walidacją płatności</text>
      <text x="50" y="780" class="label">4. Asynchroniczna komunikacja z przewoźnikami</text>
      <text x="50" y="800" class="label">5. Śledzenie statusów przesyłek</text>
      <text x="50" y="820" class="label">6. Zarządzanie klientami i operacjami finansowymi</text>
    
      <text x="600" y="700" class="subtitle">Komponenty Techniczne:</text>
      <text x="600" y="720" class="label">• Sonata Admin Panel - interfejs użytkownika</text>
      <text x="600" y="740" class="label">• Symfony Messenger - system wiadomości</text>
      <text x="600" y="760" class="label">• RabbitMQ - kolejki asynchroniczne</text>
      <text x="600" y="780" class="label">• MySQL - dane biznesowe</text>
      <text x="600" y="800" class="label">• MongoDB - event store</text>
      <text x="600" y="820" class="label">• Redis - cache i sesje</text>
    
      <!-- Color Legend -->
      <rect x="50" y="850" width="20" height="20" class="start-end"/>
      <text x="80" y="865" class="label">Start/End</text>
      
      <rect x="50" y="875" width="20" height="20" class="process"/>
      <text x="80" y="890" class="label">Process</text>
      
      <rect x="50" y="900" width="20" height="20" class="decision"/>
      <text x="80" y="915" class="label">Decision</text>
      
      <rect x="50" y="925" width="20" height="20" class="queue"/>
      <text x="80" y="940" class="label">Queue</text>
      
      <rect x="50" y="950" width="20" height="20" class="database"/>
      <text x="80" y="965" class="label">Database</text>
      
      <rect x="50" y="975" width="20" height="20" class="external"/>
      <text x="80" y="990" class="label">External System</text>
    
      <!-- Flow Types -->
      <text x="600" y="850" class="subtitle">Typy Przepływów:</text>
      <text x="600" y="870" class="label">→ Stała linia - przepływ synchroniczny</text>
      <text x="600" y="890" class="label">⇢ Przerywana linia - przepływ asynchroniczny</text>
      <text x="600" y="910" class="label">◇ Romb - punkt decyzyjny</text>
      <text x="600" y="930" class="label">▭ Prostokąt - proces/operacja</text>
      <text x="600" y="950" class="label">○ Elipsa - start/koniec procesu</text>
    </svg>

    User
    popraw diagram, bo strzalki i komponenty sie rozjezdzaja

    Cursor
    Poprawię diagram, aby strzałki i komponenty były lepiej wyrównane i nie nakładały się na siebie.
    <svg width="1600" height="1200" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 28px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .small-label { font-family: Arial, sans-serif; font-size: 10px; fill: #2c3e50; }
          .start-end { fill: #27ae60; stroke: #229954; stroke-width: 3; }
          .process { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .decision { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .queue { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .external { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .database { fill: #95a5a6; stroke: #7f8c8d; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
          .highlight { stroke: #e74c3c; stroke-width: 3; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="800" y="40" text-anchor="middle" class="title">Minotaur - Diagram Przepływu Procesów Biznesowych</text>
    
      <!-- ROW 1: Authentication Flow -->
      <!-- START -->
      <ellipse cx="100" cy="100" rx="40" ry="25" class="start-end"/>
      <text x="100" y="105" text-anchor="middle" class="subtitle">START</text>
      <text x="100" y="120" text-anchor="middle" class="label">Login</text>
    
      <!-- Authentication -->
      <rect x="180" y="85" width="100" height="30" rx="5" class="process"/>
      <text x="230" y="100" text-anchor="middle" class="subtitle">Auth</text>
      <text x="230" y="110" text-anchor="middle" class="label">Role Check</text>
    
      <!-- Decision: Valid User -->
      <polygon points="320,100 340,85 360,100 340,115" class="decision"/>
      <text x="340" y="105" text-anchor="middle" class="label">Valid?</text>
    
      <!-- Admin Panel -->
      <rect x="400" y="85" width="100" height="30" rx="5" class="process"/>
      <text x="450" y="100" text-anchor="middle" class="subtitle">Admin Panel</text>
      <text x="450" y="110" text-anchor="middle" class="label">Sonata</text>
    
      <!-- Decision: Action Type -->
      <polygon points="540,100 560,85 580,100 560,115" class="decision"/>
      <text x="560" y="105" text-anchor="middle" class="label">Action?</text>
    
      <!-- ROW 2: Order Management -->
      <!-- Order Management -->
      <rect x="620" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="670" y="75" text-anchor="middle" class="subtitle">Orders</text>
      <text x="670" y="85" text-anchor="middle" class="label">CRUD</text>
    
      <!-- Order Creation -->
      <rect x="760" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="810" y="75" text-anchor="middle" class="subtitle">Create Order</text>
      <text x="810" y="85" text-anchor="middle" class="label">Fill Data</text>
    
      <!-- MySQL Order DB -->
      <rect x="900" y="60" width="80" height="30" rx="5" class="database"/>
      <text x="940" y="75" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="940" y="85" text-anchor="middle" class="label">Orders</text>
    
      <!-- Decision: Payment Required -->
      <polygon points="1020,75 1040,60 1060,75 1040,90" class="decision"/>
      <text x="1040" y="80" text-anchor="middle" class="label">Payment</text>
      <text x="1040" y="90" text-anchor="middle" class="label">Required?</text>
    
      <!-- Payment Processing -->
      <rect x="1100" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="1150" y="75" text-anchor="middle" class="subtitle">Payment</text>
      <text x="1150" y="85" text-anchor="middle" class="label">Process</text>
    
      <!-- ROW 3: Shipment Flow -->
      <!-- Create Shipment Queue -->
      <rect x="620" y="120" width="100" height="30" rx="5" class="queue"/>
      <text x="670" y="135" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="670" y="145" text-anchor="middle" class="label">Create Shipment</text>
    
      <!-- Shipment Handler -->
      <rect x="760" y="120" width="100" height="30" rx="5" class="process"/>
      <text x="810" y="135" text-anchor="middle" class="subtitle">Handler</text>
      <text x="810" y="145" text-anchor="middle" class="label">Process</text>
    
      <!-- Decision: Payment Check -->
      <polygon points="900,135 920,120 940,135 920,150" class="decision"/>
      <text x="920" y="140" text-anchor="middle" class="label">Payment</text>
      <text x="920" y="150" text-anchor="middle" class="label">Complete?</text>
    
      <!-- Retry Queue -->
      <rect x="980" y="120" width="100" height="30" rx="5" class="queue"/>
      <text x="1030" y="135" text-anchor="middle" class="subtitle">Retry Queue</text>
      <text x="1030" y="145" text-anchor="middle" class="label">30s Delay</text>
    
      <!-- Backend API -->
      <rect x="1120" y="120" width="100" height="30" rx="5" class="external"/>
      <text x="1170" y="135" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="1170" y="145" text-anchor="middle" class="label">Bridge</text>
    
      <!-- Carrier API -->
      <rect x="1260" y="120" width="100" height="30" rx="5" class="external"/>
      <text x="1310" y="135" text-anchor="middle" class="subtitle">Carrier API</text>
      <text x="1310" y="145" text-anchor="middle" class="label">DHL/DPD/InPost</text>
    
      <!-- ROW 4: Tracking Flow -->
      <!-- Tracking Process -->
      <rect x="620" y="180" width="100" height="30" rx="5" class="process"/>
      <text x="670" y="195" text-anchor="middle" class="subtitle">Tracking</text>
      <text x="670" y="205" text-anchor="middle" class="label">Status</text>
    
      <!-- Tracking Queue -->
      <rect x="760" y="180" width="100" height="30" rx="5" class="queue"/>
      <text x="810" y="195" text-anchor="middle" class="subtitle">Tracking Queue</text>
      <text x="810" y="205" text-anchor="middle" class="label">Updates</text>
    
      <!-- Event Store -->
      <rect x="900" y="180" width="80" height="30" rx="5" class="database"/>
      <text x="940" y="195" text-anchor="middle" class="subtitle">MongoDB</text>
      <text x="940" y="205" text-anchor="middle" class="label">Events</text>
    
      <!-- ROW 5: User Management -->
      <!-- User Management -->
      <rect x="180" y="240" width="100" height="30" rx="5" class="process"/>
      <text x="230" y="255" text-anchor="middle" class="subtitle">User Mgmt</text>
      <text x="230" y="265" text-anchor="middle" class="label">CRUD</text>
    
      <!-- User Database -->
      <rect x="320" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="360" y="255" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="360" y="265" text-anchor="middle" class="label">Users</text>
    
      <!-- Financial Operations -->
      <rect x="440" y="240" width="100" height="30" rx="5" class="process"/>
      <text x="490" y="255" text-anchor="middle" class="subtitle">Financial</text>
      <text x="490" y="265" text-anchor="middle" class="label">Payments</text>
    
      <!-- Financial Database -->
      <rect x="580" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="620" y="255" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="620" y="265" text-anchor="middle" class="label">Financial</text>
    
      <!-- Redis Cache -->
      <rect x="700" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="740" y="255" text-anchor="middle" class="subtitle">Redis</text>
      <text x="740" y="265" text-anchor="middle" class="label">Cache</text>
    
      <!-- ROW 6: External APIs -->
      <!-- External APIs -->
      <rect x="180" y="300" width="100" height="30" rx="5" class="external"/>
      <text x="230" y="315" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="230" y="325" text-anchor="middle" class="label">GUS/VEIS</text>
    
      <!-- Zoho CRM -->
      <rect x="320" y="300" width="80" height="30" rx="5" class="external"/>
      <text x="360" y="315" text-anchor="middle" class="subtitle">Zoho CRM</text>
      <text x="360" y="325" text-anchor="middle" class="label">Customer</text>
    
      <!-- Google Maps -->
      <rect x="440" y="300" width="100" height="30" rx="5" class="external"/>
      <text x="490" y="315" text-anchor="middle" class="subtitle">Google Maps</text>
      <text x="490" y="325" text-anchor="middle" class="label">Geocoding</text>
    
      <!-- END -->
      <ellipse cx="800" cy="400" rx="40" ry="25" class="start-end"/>
      <text x="800" y="405" text-anchor="middle" class="subtitle">END</text>
      <text x="800" y="420" text-anchor="middle" class="label">Complete</text>
    
      <!-- ARROWS - Row 1: Authentication -->
      <line x1="140" y1="100" x2="180" y2="100" class="arrow"/>
      <line x1="280" y1="100" x2="320" y2="100" class="arrow"/>
      <line x1="360" y1="100" x2="400" y2="100" class="arrow"/>
      <line x1="500" y1="100" x2="540" y2="100" class="arrow"/>
    
      <!-- ARROWS - Row 2: Order Management -->
      <line x1="580" y1="75" x2="620" y2="75" class="arrow"/>
      <line x1="720" y1="75" x2="760" y2="75" class="arrow"/>
      <line x1="860" y1="75" x2="900" y2="75" class="arrow"/>
      <line x1="980" y1="75" x2="1020" y2="75" class="arrow"/>
      <line x1="1060" y1="60" x2="1100" y2="75" class="arrow"/>
    
      <!-- ARROWS - Row 3: Shipment Flow -->
      <line x1="580" y1="135" x2="620" y2="135" class="arrow"/>
      <line x1="720" y1="135" x2="760" y2="135" class="arrow"/>
      <line x1="860" y1="135" x2="900" y2="135" class="arrow"/>
      <line x1="940" y1="120" x2="980" y2="135" class="arrow"/>
      <line x1="1080" y1="135" x2="1120" y2="135" class="arrow"/>
      <line x1="1220" y1="135" x2="1260" y2="135" class="arrow"/>
    
      <!-- ARROWS - Row 4: Tracking -->
      <line x1="580" y1="195" x2="620" y2="195" class="arrow"/>
      <line x1="720" y1="195" x2="760" y2="195" class="arrow"/>
      <line x1="860" y1="195" x2="900" y2="195" class="arrow"/>
    
      <!-- ARROWS - Row 5: User Management -->
      <line x1="280" y1="255" x2="320" y2="255" class="arrow"/>
      <line x1="400" y1="255" x2="440" y2="255" class="arrow"/>
      <line x1="540" y1="255" x2="580" y2="255" class="arrow"/>
      <line x1="660" y1="255" x2="700" y2="255" class="arrow"/>
    
      <!-- ARROWS - Row 6: External -->
      <line x1="280" y1="315" x2="320" y2="315" class="arrow"/>
      <line x1="400" y1="315" x2="440" y2="315" class="arrow"/>
    
      <!-- ARROWS - Action Type Decisions -->
      <line x1="560" y1="85" x2="620" y2="75" class="arrow"/>
      <line x1="560" y1="115" x2="620" y2="135" class="arrow"/>
    
      <!-- ARROWS - Return to End -->
      <line x1="760" y1="400" x2="800" y2="400" class="arrow"/>
    
      <!-- Dashed Arrows for Async -->
      <line x1="1030" y1="150" x2="760" y2="135" class="arrow dashed"/>
      <line x1="1310" y1="150" x2="1120" y2="135" class="arrow dashed"/>
    
      <!-- Process Descriptions -->
      <text x="50" y="500" class="subtitle">Główne Procesy Biznesowe:</text>
      <text x="50" y="520" class="label">1. Autoryzacja użytkownika i sprawdzenie ról</text>
      <text x="50" y="535" class="label">2. Zarządzanie zamówieniami (CRUD)</text>
      <text x="50" y="550" class="label">3. Tworzenie przesyłek z walidacją płatności</text>
      <text x="50" y="565" class="label">4. Asynchroniczna komunikacja z przewoźnikami</text>
      <text x="50" y="580" class="label">5. Śledzenie statusów przesyłek</text>
      <text x="50" y="595" class="label">6. Zarządzanie klientami i operacjami finansowymi</text>
    
      <text x="600" y="500" class="subtitle">Komponenty Techniczne:</text>
      <text x="600" y="520" class="label">• Sonata Admin Panel - interfejs użytkownika</text>
      <text x="600" y="535" class="label">• Symfony Messenger - system wiadomości</text>
      <text x="600" y="550" class="label">• RabbitMQ - kolejki asynchroniczne</text>
      <text x="600" y="565" class="label">• MySQL - dane biznesowe</text>
      <text x="600" y="580" class="label">• MongoDB - event store</text>
      <text x="600" y="595" class="label">• Redis - cache i sesje</text>
    
      <!-- Color Legend -->
      <rect x="50" y="650" width="20" height="20" class="start-end"/>
      <text x="80" y="665" class="label">Start/End</text>
      
      <rect x="50" y="675" width="20" height="20" class="process"/>
      <text x="80" y="690" class="label">Process</text>
      
      <rect x="50" y="700" width="20" height="20" class="decision"/>
      <text x="80" y="715" class="label">Decision</text>
      
      <rect x="50" y="725" width="20" height="20" class="queue"/>
      <text x="80" y="740" class="label">Queue</text>
      
      <rect x="50" y="750" width="20" height="20" class="database"/>
      <text x="80" y="765" class="label">Database</text>
      
      <rect x="50" y="775" width="20" height="20" class="external"/>
      <text x="80" y="790" class="label">External System</text>
    
      <!-- Flow Types -->
      <text x="600" y="650" class="subtitle">Typy Przepływów:</text>
      <text x="600" y="670" class="label">→ Stała linia - przepływ synchroniczny</text>
      <text x="600" y="685" class="label">⇢ Przerywana linia - przepływ asynchroniczny</text>
      <text x="600" y="700" class="label">◇ Romb - punkt decyzyjny</text>
      <text x="600" y="715" class="label">▭ Prostokąt - proces/operacja</text>
      <text x="600" y="730" class="label">○ Elipsa - start/koniec procesu</text>
    
      <!-- Additional Info -->
      <text x="50" y="850" class="subtitle">Kluczowe Zalety Architektury:</text>
      <text x="50" y="870" class="label">• Asynchroniczność - nieblokujące operacje</text>
      <text x="50" y="885" class="label">• Skalowalność - kolejki RabbitMQ</text>
      <text x="50" y="900" class="label">• Niezawodność - ponowne próby i dead letter queues</text>
      <text x="50" y="915" class="label">• Izolacja - separacja komponentów</text>
      <text x="50" y="930" class="label">• Monitorowanie - event store i logi</text>
    
      <text x="600" y="850" class="subtitle">Obsługiwani Przewoźnicy (25+):</text>
      <text x="600" y="870" class="label">• DHL, DPD, InPost, FedEx, UPS</text>
      <text x="600" y="885" class="label">• GLS, Poczta Polska, Raben, Rhenus</text>
      <text x="600" y="900" class="label">• AmbroExpress, CARGUS, Eurohermes</text>
      <text x="600" y="915" class="label">• Hellmann, KuehneNagel, Landmark</text>
      <text x="600" y="930" class="label">• Olza, Paczka w Ruchu, Pekaes, SUUS</text>
    </svg>
    Poprawiony diagram zawiera:

    POPRAWIONY DIAGRAM PRZEPŁYWU - MINOTAUR#

    Główne Ulepszenia:#

    1.
    Lepsze Wyrównanie
    Komponenty ułożone w rzędach
    Równe odstępy między elementami
    Spójne pozycjonowanie
    2.
    Czytelne Strzałki
    Proste linie poziome i pionowe
    Brak nakładających się elementów
    Jasne kierunki przepływu
    3.
    Organizacja Rzędów
    Rząd 1: Autoryzacja i dostęp
    Rząd 2: Zarządzanie zamówieniami
    Rząd 3: Tworzenie przesyłek
    Rząd 4: Śledzenie przesyłek
    Rząd 5: Zarządzanie użytkownikami
    Rząd 6: Integracje zewnętrzne
    4.
    Poprawione Etykiety
    Krótsze, bardziej czytelne teksty
    Lepsze pozycjonowanie
    Spójne formatowanie
    5.
    Dodatkowe Informacje
    Rozszerzona legenda
    Lista przewoźników
    Kluczowe zalety architektury

    Kluczowe Przepływy:#

    Synchroniczne - stałe linie
    Asynchroniczne - przerywane linie
    Decyzyjne - romby
    Procesowe - prostokąty
    Dane - bazy danych
    Diagram jest teraz bardziej czytelny i profesjonalny, z poprawnie wyrównanymi elementami i strzałkami.
    <svg width="1600" height="1200" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <style>
          .title { font-family: Arial, sans-serif; font-size: 28px; font-weight: bold; fill: #2c3e50; }
          .subtitle { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #34495e; }
          .label { font-family: Arial, sans-serif; font-size: 12px; fill: #2c3e50; }
          .small-label { font-family: Arial, sans-serif; font-size: 10px; fill: #2c3e50; }
          .start-end { fill: #27ae60; stroke: #229954; stroke-width: 3; }
          .process { fill: #3498db; stroke: #2980b9; stroke-width: 2; }
          .decision { fill: #f39c12; stroke: #e67e22; stroke-width: 2; }
          .queue { fill: #9b59b6; stroke: #8e44ad; stroke-width: 2; }
          .external { fill: #e74c3c; stroke: #c0392b; stroke-width: 2; }
          .database { fill: #95a5a6; stroke: #7f8c8d; stroke-width: 2; }
          .arrow { stroke: #2c3e50; stroke-width: 2; marker-end: url(#arrowhead); }
          .dashed { stroke-dasharray: 5,5; }
          .highlight { stroke: #e74c3c; stroke-width: 3; }
        </style>
        <marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
          <polygon points="0 0, 10 3.5, 0 7" fill="#2c3e50" />
        </marker>
      </defs>
    
      <!-- Title -->
      <text x="800" y="40" text-anchor="middle" class="title">Minotaur - Diagram Przepływu Procesów Biznesowych</text>
    
      <!-- ROW 1: Authentication Flow -->
      <!-- START -->
      <ellipse cx="100" cy="100" rx="40" ry="25" class="start-end"/>
      <text x="100" y="105" text-anchor="middle" class="subtitle">START</text>
      <text x="100" y="120" text-anchor="middle" class="label">Login</text>
    
      <!-- Authentication -->
      <rect x="180" y="85" width="100" height="30" rx="5" class="process"/>
      <text x="230" y="100" text-anchor="middle" class="subtitle">Auth</text>
      <text x="230" y="110" text-anchor="middle" class="label">Role Check</text>
    
      <!-- Decision: Valid User -->
      <polygon points="320,100 340,85 360,100 340,115" class="decision"/>
      <text x="340" y="105" text-anchor="middle" class="label">Valid?</text>
    
      <!-- Admin Panel -->
      <rect x="400" y="85" width="100" height="30" rx="5" class="process"/>
      <text x="450" y="100" text-anchor="middle" class="subtitle">Admin Panel</text>
      <text x="450" y="110" text-anchor="middle" class="label">Sonata</text>
    
      <!-- Decision: Action Type -->
      <polygon points="540,100 560,85 580,100 560,115" class="decision"/>
      <text x="560" y="105" text-anchor="middle" class="label">Action?</text>
    
      <!-- ROW 2: Order Management -->
      <!-- Order Management -->
      <rect x="620" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="670" y="75" text-anchor="middle" class="subtitle">Orders</text>
      <text x="670" y="85" text-anchor="middle" class="label">CRUD</text>
    
      <!-- Order Creation -->
      <rect x="760" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="810" y="75" text-anchor="middle" class="subtitle">Create Order</text>
      <text x="810" y="85" text-anchor="middle" class="label">Fill Data</text>
    
      <!-- MySQL Order DB -->
      <rect x="900" y="60" width="80" height="30" rx="5" class="database"/>
      <text x="940" y="75" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="940" y="85" text-anchor="middle" class="label">Orders</text>
    
      <!-- Decision: Payment Required -->
      <polygon points="1020,75 1040,60 1060,75 1040,90" class="decision"/>
      <text x="1040" y="80" text-anchor="middle" class="label">Payment</text>
      <text x="1040" y="90" text-anchor="middle" class="label">Required?</text>
    
      <!-- Payment Processing -->
      <rect x="1100" y="60" width="100" height="30" rx="5" class="process"/>
      <text x="1150" y="75" text-anchor="middle" class="subtitle">Payment</text>
      <text x="1150" y="85" text-anchor="middle" class="label">Process</text>
    
      <!-- ROW 3: Shipment Flow -->
      <!-- Create Shipment Queue -->
      <rect x="620" y="120" width="100" height="30" rx="5" class="queue"/>
      <text x="670" y="135" text-anchor="middle" class="subtitle">RabbitMQ</text>
      <text x="670" y="145" text-anchor="middle" class="label">Create Shipment</text>
    
      <!-- Shipment Handler -->
      <rect x="760" y="120" width="100" height="30" rx="5" class="process"/>
      <text x="810" y="135" text-anchor="middle" class="subtitle">Handler</text>
      <text x="810" y="145" text-anchor="middle" class="label">Process</text>
    
      <!-- Decision: Payment Check -->
      <polygon points="900,135 920,120 940,135 920,150" class="decision"/>
      <text x="920" y="140" text-anchor="middle" class="label">Payment</text>
      <text x="920" y="150" text-anchor="middle" class="label">Complete?</text>
    
      <!-- Retry Queue -->
      <rect x="980" y="120" width="100" height="30" rx="5" class="queue"/>
      <text x="1030" y="135" text-anchor="middle" class="subtitle">Retry Queue</text>
      <text x="1030" y="145" text-anchor="middle" class="label">30s Delay</text>
    
      <!-- Backend API -->
      <rect x="1120" y="120" width="100" height="30" rx="5" class="external"/>
      <text x="1170" y="135" text-anchor="middle" class="subtitle">Backend API</text>
      <text x="1170" y="145" text-anchor="middle" class="label">Bridge</text>
    
      <!-- Carrier API -->
      <rect x="1260" y="120" width="100" height="30" rx="5" class="external"/>
      <text x="1310" y="135" text-anchor="middle" class="subtitle">Carrier API</text>
      <text x="1310" y="145" text-anchor="middle" class="label">DHL/DPD/InPost</text>
    
      <!-- ROW 4: Tracking Flow -->
      <!-- Tracking Process -->
      <rect x="620" y="180" width="100" height="30" rx="5" class="process"/>
      <text x="670" y="195" text-anchor="middle" class="subtitle">Tracking</text>
      <text x="670" y="205" text-anchor="middle" class="label">Status</text>
    
      <!-- Tracking Queue -->
      <rect x="760" y="180" width="100" height="30" rx="5" class="queue"/>
      <text x="810" y="195" text-anchor="middle" class="subtitle">Tracking Queue</text>
      <text x="810" y="205" text-anchor="middle" class="label">Updates</text>
    
      <!-- Event Store -->
      <rect x="900" y="180" width="80" height="30" rx="5" class="database"/>
      <text x="940" y="195" text-anchor="middle" class="subtitle">MongoDB</text>
      <text x="940" y="205" text-anchor="middle" class="label">Events</text>
    
      <!-- ROW 5: User Management -->
      <!-- User Management -->
      <rect x="180" y="240" width="100" height="30" rx="5" class="process"/>
      <text x="230" y="255" text-anchor="middle" class="subtitle">User Mgmt</text>
      <text x="230" y="265" text-anchor="middle" class="label">CRUD</text>
    
      <!-- User Database -->
      <rect x="320" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="360" y="255" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="360" y="265" text-anchor="middle" class="label">Users</text>
    
      <!-- Financial Operations -->
      <rect x="440" y="240" width="100" height="30" rx="5" class="process"/>
      <text x="490" y="255" text-anchor="middle" class="subtitle">Financial</text>
      <text x="490" y="265" text-anchor="middle" class="label">Payments</text>
    
      <!-- Financial Database -->
      <rect x="580" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="620" y="255" text-anchor="middle" class="subtitle">MySQL</text>
      <text x="620" y="265" text-anchor="middle" class="label">Financial</text>
    
      <!-- Redis Cache -->
      <rect x="700" y="240" width="80" height="30" rx="5" class="database"/>
      <text x="740" y="255" text-anchor="middle" class="subtitle">Redis</text>
      <text x="740" y="265" text-anchor="middle" class="label">Cache</text>
    
      <!-- ROW 6: External APIs -->
      <!-- External APIs -->
      <rect x="180" y="300" width="100" height="30" rx="5" class="external"/>
      <text x="230" y="315" text-anchor="middle" class="subtitle">External APIs</text>
      <text x="230" y="325" text-anchor="middle" class="label">GUS/VEIS</text>
    
      <!-- Zoho CRM -->
      <rect x="320" y="300" width="80" height="30" rx="5" class="external"/>
      <text x="360" y="315" text-anchor="middle" class="subtitle">Zoho CRM</text>
      <text x="360" y="325" text-anchor="middle" class="label">Customer</text>
    
      <!-- Google Maps -->
      <rect x="440" y="300" width="100" height="30" rx="5" class="external"/>
      <text x="490" y="315" text-anchor="middle" class="subtitle">Google Maps</text>
      <text x="490" y="325" text-anchor="middle" class="label">Geocoding</text>
    
      <!-- END -->
      <ellipse cx="800" cy="400" rx="40" ry="25" class="start-end"/>
      <text x="800" y="405" text-anchor="middle" class="subtitle">END</text>
      <text x="800" y="420" text-anchor="middle" class="label">Complete</text>
    
      <!-- ARROWS - Row 1: Authentication -->
      <line x1="140" y1="100" x2="180" y2="100" class="arrow"/>
      <line x1="280" y1="100" x2="320" y2="100" class="arrow"/>
      <line x1="360" y1="100" x2="400" y2="100" class="arrow"/>
      <line x1="500" y1="100" x2="540" y2="100" class="arrow"/>
    
      <!-- ARROWS - Row 2: Order Management -->
      <line x1="580" y1="75" x2="620" y2="75" class="arrow"/>
      <line x1="720" y1="75" x2="760" y2="75" class="arrow"/>
      <line x1="860" y1="75" x2="900" y2="75" class="arrow"/>
      <line x1="980" y1="75" x2="1020" y2="75" class="arrow"/>
      <line x1="1060" y1="60" x2="1100" y2="75" class="arrow"/>
    
      <!-- ARROWS - Row 3: Shipment Flow -->
      <line x1="580" y1="135" x2="620" y2="135" class="arrow"/>
      <line x1="720" y1="135" x2="760" y2="135" class="arrow"/>
      <line x1="860" y1="135" x2="900" y2="135" class="arrow"/>
      <line x1="940" y1="120" x2="980" y2="135" class="arrow"/>
      <line x1="1080" y1="135" x2="1120" y2="135" class="arrow"/>
      <line x1="1220" y1="135" x2="1260" y2="135" class="arrow"/>
    
      <!-- ARROWS - Row 4: Tracking -->
      <line x1="580" y1="195" x2="620" y2="195" class="arrow"/>
      <line x1="720" y1="195" x2="760" y2="195" class="arrow"/>
      <line x1="860" y1="195" x2="900" y2="195" class="arrow"/>
    
      <!-- ARROWS - Row 5: User Management -->
      <line x1="280" y1="255" x2="320" y2="255" class="arrow"/>
      <line x1="400" y1="255" x2="440" y2="255" class="arrow"/>
      <line x1="540" y1="255" x2="580" y2="255" class="arrow"/>
      <line x1="660" y1="255" x2="700" y2="255" class="arrow"/>
    
      <!-- ARROWS - Row 6: External -->
      <line x1="280" y1="315" x2="320" y2="315" class="arrow"/>
      <line x1="400" y1="315" x2="440" y2="315" class="arrow"/>
    
      <!-- ARROWS - Action Type Decisions -->
      <line x1="560" y1="85" x2="620" y2="75" class="arrow"/>
      <line x1="560" y1="115" x2="620" y2="135" class="arrow"/>
    
      <!-- ARROWS - Return to End -->
      <line x1="760" y1="400" x2="800" y2="400" class="arrow"/>
    
      <!-- Dashed Arrows for Async -->
      <line x1="1030" y1="150" x2="760" y2="135" class="arrow dashed"/>
      <line x1="1310" y1="150" x2="1120" y2="135" class="arrow dashed"/>
    
      <!-- Process Descriptions -->
      <text x="50" y="500" class="subtitle">Główne Procesy Biznesowe:</text>
      <text x="50" y="520" class="label">1. Autoryzacja użytkownika i sprawdzenie ról</text>
      <text x="50" y="535" class="label">2. Zarządzanie zamówieniami (CRUD)</text>
      <text x="50" y="550" class="label">3. Tworzenie przesyłek z walidacją płatności</text>
      <text x="50" y="565" class="label">4. Asynchroniczna komunikacja z przewoźnikami</text>
      <text x="50" y="580" class="label">5. Śledzenie statusów przesyłek</text>
      <text x="50" y="595" class="label">6. Zarządzanie klientami i operacjami finansowymi</text>
    
      <text x="600" y="500" class="subtitle">Komponenty Techniczne:</text>
      <text x="600" y="520" class="label">• Sonata Admin Panel - interfejs użytkownika</text>
      <text x="600" y="535" class="label">• Symfony Messenger - system wiadomości</text>
      <text x="600" y="550" class="label">• RabbitMQ - kolejki asynchroniczne</text>
      <text x="600" y="565" class="label">• MySQL - dane biznesowe</text>
      <text x="600" y="580" class="label">• MongoDB - event store</text>
      <text x="600" y="595" class="label">• Redis - cache i sesje</text>
    
      <!-- Color Legend -->
      <rect x="50" y="650" width="20" height="20" class="start-end"/>
      <text x="80" y="665" class="label">Start/End</text>
      
      <rect x="50" y="675" width="20" height="20" class="process"/>
      <text x="80" y="690" class="label">Process</text>
      
      <rect x="50" y="700" width="20" height="20" class="decision"/>
      <text x="80" y="715" class="label">Decision</text>
      
      <rect x="50" y="725" width="20" height="20" class="queue"/>
      <text x="80" y="740" class="label">Queue</text>
      
      <rect x="50" y="750" width="20" height="20" class="database"/>
      <text x="80" y="765" class="label">Database</text>
      
      <rect x="50" y="775" width="20" height="20" class="external"/>
      <text x="80" y="790" class="label">External System</text>
    
      <!-- Flow Types -->
      <text x="600" y="650" class="subtitle">Typy Przepływów:</text>
      <text x="600" y="670" class="label">→ Stała linia - przepływ synchroniczny</text>
      <text x="600" y="685" class="label">⇢ Przerywana linia - przepływ asynchroniczny</text>
      <text x="600" y="700" class="label">◇ Romb - punkt decyzyjny</text>
      <text x="600" y="715" class="label">▭ Prostokąt - proces/operacja</text>
      <text x="600" y="730" class="label">○ Elipsa - start/koniec procesu</text>
    
      <!-- Additional Info -->
      <text x="50" y="850" class="subtitle">Kluczowe Zalety Architektury:</text>
      <text x="50" y="870" class="label">• Asynchroniczność - nieblokujące operacje</text>
      <text x="50" y="885" class="label">• Skalowalność - kolejki RabbitMQ</text>
      <text x="50" y="900" class="label">• Niezawodność - ponowne próby i dead letter queues</text>
      <text x="50" y="915" class="label">• Izolacja - separacja komponentów</text>
      <text x="50" y="930" class="label">• Monitorowanie - event store i logi</text>
    
      <text x="600" y="850" class="subtitle">Obsługiwani Przewoźnicy (25+):</text>
      <text x="600" y="870" class="label">• DHL, DPD, InPost, FedEx, UPS</text>
      <text x="600" y="885" class="label">• GLS, Poczta Polska, Raben, Rhenus</text>
      <text x="600" y="900" class="label">• AmbroExpress, CARGUS, Eurohermes</text>
      <text x="600" y="915" class="label">• Hellmann, KuehneNagel, Landmark</text>
      <text x="600" y="930" class="label">• Olza, Paczka w Ruchu, Pekaes, SUUS</text>
    </svg>

    User
    nadal sie rozjezdza - wygeneruj png albo pdf

    Cursor
    Niestety nie mogę bezpośrednio generować plików PNG lub PDF. Mogę jednak zaproponować kilka rozwiązań:

    OPCJE GENEROWANIA PLIKÓW:#

    1. Konwersja SVG → PNG/PDF#

    Opcja A: Przeglądarka
    Skopiuj kod SVG
    Zapisz jako plik .svg
    Otwórz w przeglądarce (Chrome, Firefox)
    Drukuj → "Zapisz jako PDF"
    Lub zrzut ekranu → PNG
    Opcja B: Online Converter
    Wklej kod SVG na: https://convertio.co/svg-png/
    Lub: https://cloudconvert.com/svg-to-png
    Opcja C: Inkscape (darmowy)
    Otwórz plik SVG w Inkscape
    Eksportuj jako PNG/PDF

    2. Alternatywne Narzędzia#

    Draw.io (diagrams.net)
    Darmowe narzędzie online
    Eksport do PNG/PDF
    Profesjonalne diagramy
    Lucidchart
    Narzędzie online
    Eksport do różnych formatów
    Microsoft Visio
    Profesjonalne narzędzie
    Eksport do PNG/PDF

    3. Prosty Diagram Tekstowy#

    Mogę wygenerować prosty diagram ASCII, który będzie czytelny w każdym edytorze:
    MINOTAUR - DIAGRAM PRZEPŁYWU
    ================================
    
    START (Login) → Auth → Valid? → Admin Panel → Action Type?
                                        ↓
                        ┌─────────────┼─────────────┐
                        ↓             ↓             ↓
                    Orders        User Mgmt    Financial
                        ↓             ↓             ↓
                    Create Order   CRUD Ops    Payments
                        ↓             ↓             ↓
                    MySQL DB      MySQL DB     MySQL DB
                        ↓             ↓             ↓
                    Payment?      Redis Cache   External APIs
                        ↓             ↓             ↓
                    Payment       Zoho CRM     Google Maps
                    Process
                        ↓
                    RabbitMQ (Create Shipment)
                        ↓
                    Shipment Handler
                        ↓
                    Payment Complete?
                        ↓
                    Retry Queue (30s) ← Backend API → Carrier APIs
                        ↓
                    Event Store (MongoDB)
                        ↓
                    END

    4. Rekomendacja#

    Najlepsze rozwiązanie:
    1.
    Użyj Draw.io (diagrams.net) - darmowe, profesjonalne
    2.
    Stwórz diagram na podstawie mojego opisu
    3.
    Eksportuj jako PNG/PDF
    4.
    Zachowaj pełną kontrolę nad wyglądem
    Czy chcesz, żebym:
    Wygenerował prosty diagram ASCII?
    Opisał szczegółowo jak użyć Draw.io?
    Stworzył uproszczoną wersję SVG?
    MINOTAUR - DIAGRAM PRZEPŁYWU
    ================================
    
    START (Login) → Auth → Valid? → Admin Panel → Action Type?
                                        ↓
                        ┌─────────────┼─────────────┐
                        ↓             ↓             ↓
                    Orders        User Mgmt    Financial
                        ↓             ↓             ↓
                    Create Order   CRUD Ops    Payments
                        ↓             ↓             ↓
                    MySQL DB      MySQL DB     MySQL DB
                        ↓             ↓             ↓
                    Payment?      Redis Cache   External APIs
                        ↓             ↓             ↓
                    Payment       Zoho CRM     Google Maps
                    Process
                        ↓
                    RabbitMQ (Create Shipment)
                        ↓
                    Shipment Handler
                        ↓
                    Payment Complete?
                        ↓
                    Retry Queue (30s) ← Backend API → Carrier APIs
                        ↓
                    Event Store (MongoDB)
                        ↓
                    END

    User
    a plik dla draw.io?

    Cursor
    Wygeneruję plik XML dla Draw.io (diagrams.net) z diagramem przepływu Minotaur:
    <mxfile host="app.diagrams.net" modified="2024-01-01T00:00:00.000Z" agent="5.0" etag="xxx" version="22.1.16" type="device">
      <diagram name="Minotaur Flow" id="minotaur-flow">
        <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
          <root>
            <mxCell id="0" />
            <mxCell id="1" parent="0" />
            
            <!-- Title -->
            <mxCell id="title" value="Minotaur - Diagram Przepływu Procesów Biznesowych" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="400" y="20" width="800" height="40" as="geometry" />
            </mxCell>
    
            <!-- START -->
            <mxCell id="start" value="START&#xa;Login" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=14;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="100" y="100" width="80" height="50" as="geometry" />
            </mxCell>
    
            <!-- Authentication -->
            <mxCell id="auth" value="Authentication&#xa;Role Check" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="220" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Valid User -->
            <mxCell id="valid-decision" value="Valid User?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="380" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Admin Panel -->
            <mxCell id="admin" value="Admin Panel&#xa;Sonata Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="520" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Action Type -->
            <mxCell id="action-decision" value="Action Type?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="680" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Order Management -->
            <mxCell id="order-mgmt" value="Order Management&#xa;CRUD Operations" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- User Management -->
            <mxCell id="user-mgmt" value="User Management&#xa;Customer Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Financial Operations -->
            <mxCell id="financial" value="Financial Operations&#xa;Payments/Invoices" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Order Creation -->
            <mxCell id="order-create" value="Order Creation&#xa;Fill Order Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- MySQL Order DB -->
            <mxCell id="mysql-order" value="MySQL&#xa;Order Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="80" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Payment Required -->
            <mxCell id="payment-decision" value="Payment Required?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1280" y="80" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Payment Processing -->
            <mxCell id="payment-process" value="Payment Processing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1420" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- RabbitMQ Create Shipment -->
            <mxCell id="rabbitmq-create" value="RabbitMQ&#xa;Create Shipment Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Shipment Handler -->
            <mxCell id="shipment-handler" value="Shipment Handler&#xa;Process Order" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Payment Check -->
            <mxCell id="payment-check" value="Payment Complete?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="150" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Retry Queue -->
            <mxCell id="retry-queue" value="Retry Queue&#xa;30s Delay" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1440" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Backend API -->
            <mxCell id="backend-api" value="Backend API&#xa;Bridge Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Carrier API -->
            <mxCell id="carrier-api" value="Carrier API&#xa;DHL/DPD/InPost" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Tracking Process -->
            <mxCell id="tracking" value="Tracking&#xa;Shipment Status" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="290" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Tracking Queue -->
            <mxCell id="tracking-queue" value="Tracking Queue&#xa;Status Updates" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="290" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Event Store -->
            <mxCell id="event-store" value="Event Store&#xa;MongoDB" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="290" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- User Database -->
            <mxCell id="user-db" value="MySQL&#xa;User Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Financial Database -->
            <mxCell id="financial-db" value="MySQL&#xa;Financial Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1120" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Redis Cache -->
            <mxCell id="redis" value="Redis&#xa;Cache/Sessions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1260" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- External APIs -->
            <mxCell id="external-apis" value="External APIs&#xa;GUS/VEIS/Google" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="430" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Zoho CRM -->
            <mxCell id="zoho" value="Zoho CRM&#xa;Customer Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="430" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- END -->
            <mxCell id="end" value="END&#xa;Complete" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=14;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="760" y="500" width="80" height="50" as="geometry" />
            </mxCell>
    
            <!-- ARROWS -->
            <!-- Authentication Flow -->
            <mxCell id="arrow1" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="start" target="auth">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="180" y="125" as="sourcePoint" />
                <mxPoint x="220" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow2" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="auth" target="valid-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="340" y="125" as="sourcePoint" />
                <mxPoint x="380" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow3" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="valid-decision" target="admin">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="480" y="125" as="sourcePoint" />
                <mxPoint x="520" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow4" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="admin" target="action-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="640" y="125" as="sourcePoint" />
                <mxPoint x="680" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Action Type Decisions -->
            <mxCell id="arrow5" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="order-mgmt">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="105" as="sourcePoint" />
                <mxPoint x="820" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow6" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="user-mgmt">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="125" as="sourcePoint" />
                <mxPoint x="820" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow7" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="financial">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="145" as="sourcePoint" />
                <mxPoint x="820" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Order Flow -->
            <mxCell id="arrow8" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-mgmt" target="order-create">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="105" as="sourcePoint" />
                <mxPoint x="980" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow9" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-create" target="mysql-order">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="105" as="sourcePoint" />
                <mxPoint x="1140" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow10" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="mysql-order" target="payment-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1240" y="105" as="sourcePoint" />
                <mxPoint x="1280" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow11" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="payment-decision" target="payment-process">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1380" y="105" as="sourcePoint" />
                <mxPoint x="1420" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Shipment Flow -->
            <mxCell id="arrow12" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-create" target="rabbitmq-create">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="980" y="130" as="sourcePoint" />
                <mxPoint x="980" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow13" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="rabbitmq-create" target="shipment-handler">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow14" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="shipment-handler" target="payment-check">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="175" as="sourcePoint" />
                <mxPoint x="1300" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow15" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="payment-check" target="retry-queue">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1400" y="175" as="sourcePoint" />
                <mxPoint x="1440" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Backend to Carrier -->
            <mxCell id="arrow16" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="shipment-handler" target="backend-api">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1140" y="200" as="sourcePoint" />
                <mxPoint x="1140" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow17" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="backend-api" target="carrier-api">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="245" as="sourcePoint" />
                <mxPoint x="1300" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Tracking Flow -->
            <mxCell id="arrow18" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="rabbitmq-create" target="tracking">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="980" y="200" as="sourcePoint" />
                <mxPoint x="980" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow19" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="tracking" target="tracking-queue">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="315" as="sourcePoint" />
                <mxPoint x="1140" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow20" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="tracking-queue" target="event-store">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="315" as="sourcePoint" />
                <mxPoint x="1300" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- User Management Flow -->
            <mxCell id="arrow21" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="user-mgmt" target="user-db">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="175" as="sourcePoint" />
                <mxPoint x="980" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Financial Flow -->
            <mxCell id="arrow22" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="financial-db">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="245" as="sourcePoint" />
                <mxPoint x="1120" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow23" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="redis">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="270" as="sourcePoint" />
                <mxPoint x="1260" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- External APIs -->
            <mxCell id="arrow24" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="external-apis">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="270" as="sourcePoint" />
                <mxPoint x="980" y="455" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow25" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="user-mgmt" target="zoho">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="455" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Return to End -->
            <mxCell id="arrow26" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="event-store" target="end">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1300" y="340" as="sourcePoint" />
                <mxPoint x="800" y="500" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Dashed Arrow for Retry -->
            <mxCell id="retry-arrow" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;strokeDashPattern=5 5;" edge="1" parent="1" source="retry-queue" target="shipment-handler">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1440" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Legend -->
            <mxCell id="legend-title" value="LEGENDA" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="50" y="600" width="100" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-start" value="Start/End" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="640" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-process" value="Process" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="680" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-decision" value="Decision" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="720" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-queue" value="Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="760" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-db" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="800" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-external" value="External" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="840" width="80" height="30" as="geometry" />
            </mxCell>
    
            <!-- Process Description -->
            <mxCell id="process-desc" value="Główne Procesy Biznesowe:&#xa;&#xa;1. Autoryzacja użytkownika i sprawdzenie ról&#xa;2. Zarządzanie zamówieniami (CRUD)&#xa;3. Tworzenie przesyłek z walidacją płatności&#xa;4. Asynchroniczna komunikacja z przewoźnikami&#xa;5. Śledzenie statusów przesyłek&#xa;6. Zarządzanie klientami i operacjami finansowymi" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="200" y="600" width="400" height="150" as="geometry" />
            </mxCell>
    
            <!-- Technical Components -->
            <mxCell id="tech-desc" value="Komponenty Techniczne:&#xa;&#xa;• Sonata Admin Panel - interfejs użytkownika&#xa;• Symfony Messenger - system wiadomości&#xa;• RabbitMQ - kolejki asynchroniczne&#xa;• MySQL - dane biznesowe&#xa;• MongoDB - event store&#xa;• Redis - cache i sesje&#xa;• Backend API - bridge do przewoźników" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="650" y="600" width="400" height="150" as="geometry" />
            </mxCell>
    
          </root>
        </mxGraphModel>
      </diagram>
    </mxfile>

    INSTRUKCJA UŻYCIA:#

    1. Otwórz Draw.io#

    Wejdź na: https://app.diagrams.net/
    Kliknij "Create New Diagram"

    2. Zaimportuj Plik#

    Kliknij File → Import From → Text
    Wklej powyższy kod XML
    Kliknij Import

    3. Dostosuj Diagram#

    Przesuń elementy według potrzeb
    Zmień kolory i style
    Dodaj dodatkowe komentarze

    4. Eksportuj#

    File → Export As → PNG lub PDF
    Wybierz rozdzielczość
    Kliknij Export

    Zawartość Diagramu:#

    ✅ Kompletny przepływ procesów biznesowych
    ✅ Wszystkie komponenty techniczne
    ✅ Kolorowe oznaczenia typów
    ✅ Strzałki przepływu (synchroniczne/asynchroniczne)
    ✅ Legenda i opisy
    ✅ Gotowy do edycji w Draw.io
    Diagram zawiera wszystkie kluczowe elementy architektury Minotaur z poprawnie wyrównanymi komponentami i strzałkami.
    <mxfile host="app.diagrams.net" modified="2024-01-01T00:00:00.000Z" agent="5.0" etag="xxx" version="22.1.16" type="device">
      <diagram name="Minotaur Flow" id="minotaur-flow">
        <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1200" math="0" shadow="0">
          <root>
            <mxCell id="0" />
            <mxCell id="1" parent="0" />
            
            <!-- Title -->
            <mxCell id="title" value="Minotaur - Diagram Przepływu Procesów Biznesowych" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="400" y="20" width="800" height="40" as="geometry" />
            </mxCell>
    
            <!-- START -->
            <mxCell id="start" value="START&#xa;Login" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=14;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="100" y="100" width="80" height="50" as="geometry" />
            </mxCell>
    
            <!-- Authentication -->
            <mxCell id="auth" value="Authentication&#xa;Role Check" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="220" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Valid User -->
            <mxCell id="valid-decision" value="Valid User?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="380" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Admin Panel -->
            <mxCell id="admin" value="Admin Panel&#xa;Sonata Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="520" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Action Type -->
            <mxCell id="action-decision" value="Action Type?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="680" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Order Management -->
            <mxCell id="order-mgmt" value="Order Management&#xa;CRUD Operations" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- User Management -->
            <mxCell id="user-mgmt" value="User Management&#xa;Customer Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Financial Operations -->
            <mxCell id="financial" value="Financial Operations&#xa;Payments/Invoices" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Order Creation -->
            <mxCell id="order-create" value="Order Creation&#xa;Fill Order Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- MySQL Order DB -->
            <mxCell id="mysql-order" value="MySQL&#xa;Order Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="80" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Payment Required -->
            <mxCell id="payment-decision" value="Payment Required?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1280" y="80" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Payment Processing -->
            <mxCell id="payment-process" value="Payment Processing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1420" y="80" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- RabbitMQ Create Shipment -->
            <mxCell id="rabbitmq-create" value="RabbitMQ&#xa;Create Shipment Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Shipment Handler -->
            <mxCell id="shipment-handler" value="Shipment Handler&#xa;Process Order" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Payment Check -->
            <mxCell id="payment-check" value="Payment Complete?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="150" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Retry Queue -->
            <mxCell id="retry-queue" value="Retry Queue&#xa;30s Delay" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1440" y="150" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Backend API -->
            <mxCell id="backend-api" value="Backend API&#xa;Bridge Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Carrier API -->
            <mxCell id="carrier-api" value="Carrier API&#xa;DHL/DPD/InPost" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="220" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Tracking Process -->
            <mxCell id="tracking" value="Tracking&#xa;Shipment Status" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="290" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Tracking Queue -->
            <mxCell id="tracking-queue" value="Tracking Queue&#xa;Status Updates" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="290" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Event Store -->
            <mxCell id="event-store" value="Event Store&#xa;MongoDB" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1300" y="290" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- User Database -->
            <mxCell id="user-db" value="MySQL&#xa;User Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Financial Database -->
            <mxCell id="financial-db" value="MySQL&#xa;Financial Table" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1120" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Redis Cache -->
            <mxCell id="redis" value="Redis&#xa;Cache/Sessions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1260" y="360" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- External APIs -->
            <mxCell id="external-apis" value="External APIs&#xa;GUS/VEIS/Google" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="980" y="430" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Zoho CRM -->
            <mxCell id="zoho" value="Zoho CRM&#xa;Customer Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1140" y="430" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- END -->
            <mxCell id="end" value="END&#xa;Complete" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=14;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="760" y="500" width="80" height="50" as="geometry" />
            </mxCell>
    
            <!-- ARROWS -->
            <!-- Authentication Flow -->
            <mxCell id="arrow1" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="start" target="auth">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="180" y="125" as="sourcePoint" />
                <mxPoint x="220" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow2" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="auth" target="valid-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="340" y="125" as="sourcePoint" />
                <mxPoint x="380" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow3" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="valid-decision" target="admin">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="480" y="125" as="sourcePoint" />
                <mxPoint x="520" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow4" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="admin" target="action-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="640" y="125" as="sourcePoint" />
                <mxPoint x="680" y="125" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Action Type Decisions -->
            <mxCell id="arrow5" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="order-mgmt">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="105" as="sourcePoint" />
                <mxPoint x="820" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow6" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="user-mgmt">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="125" as="sourcePoint" />
                <mxPoint x="820" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow7" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="action-decision" target="financial">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="780" y="145" as="sourcePoint" />
                <mxPoint x="820" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Order Flow -->
            <mxCell id="arrow8" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-mgmt" target="order-create">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="105" as="sourcePoint" />
                <mxPoint x="980" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow9" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-create" target="mysql-order">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="105" as="sourcePoint" />
                <mxPoint x="1140" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow10" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="mysql-order" target="payment-decision">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1240" y="105" as="sourcePoint" />
                <mxPoint x="1280" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow11" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="payment-decision" target="payment-process">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1380" y="105" as="sourcePoint" />
                <mxPoint x="1420" y="105" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Shipment Flow -->
            <mxCell id="arrow12" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="order-create" target="rabbitmq-create">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="980" y="130" as="sourcePoint" />
                <mxPoint x="980" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow13" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="rabbitmq-create" target="shipment-handler">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow14" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="shipment-handler" target="payment-check">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="175" as="sourcePoint" />
                <mxPoint x="1300" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow15" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="payment-check" target="retry-queue">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1400" y="175" as="sourcePoint" />
                <mxPoint x="1440" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Backend to Carrier -->
            <mxCell id="arrow16" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="shipment-handler" target="backend-api">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1140" y="200" as="sourcePoint" />
                <mxPoint x="1140" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow17" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="backend-api" target="carrier-api">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="245" as="sourcePoint" />
                <mxPoint x="1300" y="245" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Tracking Flow -->
            <mxCell id="arrow18" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="rabbitmq-create" target="tracking">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="980" y="200" as="sourcePoint" />
                <mxPoint x="980" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow19" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="tracking" target="tracking-queue">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1100" y="315" as="sourcePoint" />
                <mxPoint x="1140" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow20" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="tracking-queue" target="event-store">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1260" y="315" as="sourcePoint" />
                <mxPoint x="1300" y="315" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- User Management Flow -->
            <mxCell id="arrow21" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="user-mgmt" target="user-db">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="175" as="sourcePoint" />
                <mxPoint x="980" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Financial Flow -->
            <mxCell id="arrow22" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="financial-db">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="245" as="sourcePoint" />
                <mxPoint x="1120" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow23" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="redis">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="270" as="sourcePoint" />
                <mxPoint x="1260" y="385" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- External APIs -->
            <mxCell id="arrow24" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="financial" target="external-apis">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="270" as="sourcePoint" />
                <mxPoint x="980" y="455" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <mxCell id="arrow25" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="user-mgmt" target="zoho">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="940" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="455" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Return to End -->
            <mxCell id="arrow26" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;" edge="1" parent="1" source="event-store" target="end">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1300" y="340" as="sourcePoint" />
                <mxPoint x="800" y="500" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Dashed Arrow for Retry -->
            <mxCell id="retry-arrow" value="" style="endArrow=classic;html=1;rounded=0;strokeWidth=2;strokeDashPattern=5 5;" edge="1" parent="1" source="retry-queue" target="shipment-handler">
              <mxGeometry width="50" height="50" relative="1" as="geometry">
                <mxPoint x="1440" y="175" as="sourcePoint" />
                <mxPoint x="1140" y="175" as="targetPoint" />
              </mxGeometry>
            </mxCell>
    
            <!-- Legend -->
            <mxCell id="legend-title" value="LEGENDA" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="50" y="600" width="100" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-start" value="Start/End" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="640" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-process" value="Process" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="680" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-decision" value="Decision" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="720" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-queue" value="Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="760" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-db" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="800" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-external" value="External" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="840" width="80" height="30" as="geometry" />
            </mxCell>
    
            <!-- Process Description -->
            <mxCell id="process-desc" value="Główne Procesy Biznesowe:&#xa;&#xa;1. Autoryzacja użytkownika i sprawdzenie ról&#xa;2. Zarządzanie zamówieniami (CRUD)&#xa;3. Tworzenie przesyłek z walidacją płatności&#xa;4. Asynchroniczna komunikacja z przewoźnikami&#xa;5. Śledzenie statusów przesyłek&#xa;6. Zarządzanie klientami i operacjami finansowymi" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="200" y="600" width="400" height="150" as="geometry" />
            </mxCell>
    
            <!-- Technical Components -->
            <mxCell id="tech-desc" value="Komponenty Techniczne:&#xa;&#xa;• Sonata Admin Panel - interfejs użytkownika&#xa;• Symfony Messenger - system wiadomości&#xa;• RabbitMQ - kolejki asynchroniczne&#xa;• MySQL - dane biznesowe&#xa;• MongoDB - event store&#xa;• Redis - cache i sesje&#xa;• Backend API - bridge do przewoźników" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="650" y="600" width="400" height="150" as="geometry" />
            </mxCell>
    
          </root>
        </mxGraphModel>
      </diagram>
    </mxfile>

    User
    diagram przeplywu nei zawiera wszyskich procesow - produkty, dodatki, cenniki, rabaty, itd

    Cursor
    Masz rację! Diagram jest niepełny. Wygeneruję rozszerzony plik Draw.io z wszystkimi procesami biznesowymi Minotaur:
    <mxfile host="app.diagrams.net" modified="2024-01-01T00:00:00.000Z" agent="5.0" etag="xxx" version="22.1.16" type="device">
      <diagram name="Minotaur Complete Flow" id="minotaur-complete-flow">
        <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2000" pageHeight="1600" math="0" shadow="0">
          <root>
            <mxCell id="0" />
            <mxCell id="1" parent="0" />
            
            <!-- Title -->
            <mxCell id="title" value="Minotaur - Kompletny Diagram Przepływu Procesów Biznesowych" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="600" y="20" width="800" height="40" as="geometry" />
            </mxCell>
    
            <!-- START -->
            <mxCell id="start" value="START&#xa;Login" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=14;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="100" y="100" width="80" height="50" as="geometry" />
            </mxCell>
    
            <!-- Authentication -->
            <mxCell id="auth" value="Authentication&#xa;Role Check" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="220" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Valid User -->
            <mxCell id="valid-decision" value="Valid User?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="380" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- Admin Panel -->
            <mxCell id="admin" value="Admin Panel&#xa;Sonata Interface" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="520" y="100" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Decision: Action Type -->
            <mxCell id="action-decision" value="Action Type?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="680" y="100" width="100" height="50" as="geometry" />
            </mxCell>
    
            <!-- ROW 1: Core Business Processes -->
            <!-- Order Management -->
            <mxCell id="order-mgmt" value="Order Management&#xa;CRUD Operations" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="60" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- User Management -->
            <mxCell id="user-mgmt" value="User Management&#xa;Customer Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="130" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Product Management -->
            <mxCell id="product-mgmt" value="Product Management&#xa;Services/Packages" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="200" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Addon Management -->
            <mxCell id="addon-mgmt" value="Addon Management&#xa;Additional Services" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="270" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Pricing Management -->
            <mxCell id="pricing-mgmt" value="Pricing Management&#xa;Tariffs/Rates" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="340" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Discount Management -->
            <mxCell id="discount-mgmt" value="Discount Management&#xa;Rebates/Promotions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="410" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Financial Operations -->
            <mxCell id="financial" value="Financial Operations&#xa;Payments/Invoices" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="480" width="120" height="50" as="geometry" />
            </mxCell>
    
            <!-- Carrier Management -->
            <mxCell id="carrier-mgmt" value="Carrier Management&#xa;Integration Setup" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="820" y="550" widt

    User
    kontynuuj

    Cursor
    Kontynuuję plik Draw.io z kompletnego diagramu przepływu:
            <!-- Process Descriptions -->
            <mxCell id="process-desc" value="Kompletne Procesy Biznesowe:&#xa;&#xa;1. Autoryzacja użytkownika i sprawdzenie ról&#xa;2. Zarządzanie zamówieniami (CRUD)&#xa;3. Zarządzanie produktami i usługami&#xa;4. Zarządzanie dodatkami (addons)&#xa;5. Zarządzanie cennikami i taryfami&#xa;6. Zarządzanie rabatami i promocjami&#xa;7. Tworzenie przesyłek z walidacją płatności&#xa;8. Asynchroniczna komunikacja z przewoźnikami&#xa;9. Śledzenie statusów przesyłek&#xa;10. Zarządzanie klientami i operacjami finansowymi&#xa;11. Integracja z zewnętrznymi systemami" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Technical Components -->
            <mxCell id="tech-desc" value="Komponenty Techniczne:&#xa;&#xa;• Sonata Admin Panel - interfejs użytkownika&#xa;• Symfony Messenger - system wiadomości&#xa;• RabbitMQ - kolejki asynchroniczne&#xa;• MySQL - dane biznesowe (Orders, Users, Products)&#xa;• MongoDB - event store i dokumenty&#xa;• Redis - cache i sesje&#xa;• Backend API - bridge do przewoźników&#xa;• External APIs - GUS, VEIS, Google Maps&#xa;• Zoho CRM - dane klientów&#xa;• Tariff API - dane cenowe" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="500" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Business Entities -->
            <mxCell id="entities-desc" value="Encje Biznesowe:&#xa;&#xa;• User - użytkownicy/klienci&#xa;• Order - zamówienia przesyłek&#xa;• Product - produkty/usługi kurierskie&#xa;• Addon - dodatkowe usługi&#xa;• Carrier - przewoźnicy&#xa;• FinancialOperation - operacje finansowe&#xa;• Invoice - faktury&#xa;• TradeDocuments - dokumenty handlowe&#xa;• OrderEvent - zdarzenia zamówień&#xa;• OrderTrackingHistory - historia śledzenia" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="950" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Color Legend -->
            <mxCell id="legend-title" value="LEGENDA" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="50" y="1250" width="100" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-start" value="Start/End" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1290" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-process" value="Process" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1330" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-decision" value="Decision" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1370" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-queue" value="Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1410" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-db" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1450" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-external" value="External" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1490" width="80" height="30" as="geometry" />
            </mxCell>
    
            <!-- Flow Types -->
            <mxCell id="flow-desc" value="Typy Przepływów:&#xa;&#xa;→ Stała linia - przepływ synchroniczny&#xa;⇢ Przerywana linia - przepływ asynchroniczny&#xa;◇ Romb - punkt decyzyjny&#xa;▭ Prostokąt - proces/operacja&#xa;○ Elipsa - start/koniec procesu&#xa;&#xa;Kluczowe Zalety Architektury:&#xa;• Asynchroniczność - nieblokujące operacje&#xa;• Skalowalność - kolejki RabbitMQ&#xa;• Niezawodność - ponowne próby i dead letter queues&#xa;• Izolacja - separacja komponentów&#xa;• Monitorowanie - event store i logi" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="200" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- Supported Carriers -->
            <mxCell id="carriers-desc" value="Obsługiwani Przewoźnicy (25+):&#xa;&#xa;• DHL (Express, Freight, International)&#xa;• DPD&#xa;• InPost (International, QuickReturn)&#xa;• FedEx (Domestic, International)&#xa;• UPS&#xa;• GLS&#xa;• Poczta Polska (Palety)&#xa;• Raben&#xa;• Rhenus&#xa;• Hellmann&#xa;• KuehneNagel&#xa;• Landmark&#xa;• AmbroExpress&#xa;• CARGUS&#xa;• Eurohermes&#xa;• Olza&#xa;• Paczka w Ruchu&#xa;• Pekaes&#xa;• Spring&#xa;• SUUS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="650" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- System Features -->
            <mxCell id="features-desc" value="Funkcje Systemu:&#xa;&#xa;• Panel administracyjny Sonata&#xa;• Zarządzanie użytkownikami i rolami&#xa;• CRUD operacje na zamówieniach&#xa;• Konfiguracja produktów i usług&#xa;• System dodatków (addons)&#xa;• Zarządzanie cennikami&#xa;• System rabatów i promocji&#xa;• Automatyczne tworzenie przesyłek&#xa;• Śledzenie statusów w czasie rzeczywistym&#xa;• Integracja z systemami zewnętrznymi&#xa;• Raporty i analityka&#xa;• Event sourcing&#xa;• Asynchroniczne przetwarzanie&#xa;• Skalowalna architektura" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1100" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- Additional Process Flows -->
            <!-- Product Management Flow -->
            <mxCell id="product-flow" value="Product Management Flow:&#xa;&#xa;1. Definicja produktów/usług&#xa;2. Konfiguracja parametrów&#xa;3. Przypisanie do przewoźników&#xa;4. Ustawienie cen i taryf&#xa;5. Aktywacja/deaktywacja&#xa;6. Monitoring wykorzystania" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="50" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Addon Management Flow -->
            <mxCell id="addon-flow" value="Addon Management Flow:&#xa;&#xa;1. Definicja dodatkowych usług&#xa;2. Konfiguracja warunków&#xa;3. Ustawienie cen addonów&#xa;4. Kompatybilność z produktami&#xa;5. Automatyczne dodawanie&#xa;6. Raportowanie wykorzystania" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="400" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Pricing Management Flow -->
            <mxCell id="pricing-flow" value="Pricing Management Flow:&#xa;&#xa;1. Definicja taryf&#xa;2. Ustawienie stref cenowych&#xa;3. Konfiguracja wag i wymiarów&#xa;4. Ustawienie cen specjalnych&#xa;5. Walidacja cen&#xa;6. Synchronizacja z API" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="750" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Discount Management Flow -->
            <mxCell id="discount-flow" value="Discount Management Flow:&#xa;&#xa;1. Definicja rabatów&#xa;2. Ustawienie warunków&#xa;3. Konfiguracja promocji&#xa;4. Walidacja uprawnień&#xa;5. Automatyczne naliczanie&#xa;6. Raportowanie rabatów" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="1100" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Financial Operations Flow -->
            <mxCell id="financial-flow" value="Financial Operations Flow:&#xa;&#xa;1. Przetwarzanie płatności&#xa;2. Generowanie faktur&#xa;3. Zarządzanie saldami&#xa;4. Raportowanie finansowe&#xa;5. Integracja z systemami&#xa;6. Audyt operacji" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="1450" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Footer -->
            <mxCell id="footer" value="Minotaur - System Zarządzania Logistyką Globkurier | Architektura Clean Architecture | Symfony 7.0 | RabbitMQ | MySQL/MongoDB/Redis" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#7f8c8d;" vertex="1" parent="1">
              <mxGeometry x="400" y="1700" width="800" height="30" as="geometry" />
            </mxCell>
    
          </root>
        </mxGraphModel>
      </diagram>
    </mxfile>

    KOMPLETNY DIAGRAM PRZEPŁYWU - MINOTAUR#

    Dodane Procesy Biznesowe:#

    1. Zarządzanie Produktami#

    Definicja usług kurierskich
    Konfiguracja parametrów
    Przypisanie do przewoźników
    Ustawienie cen i taryf

    2. Zarządzanie Dodatkami (Addons)#

    Dodatkowe usługi (ubezpieczenie, doręczenie)
    Konfiguracja warunków
    Kompatybilność z produktami
    Automatyczne dodawanie

    3. Zarządzanie Cennikami#

    Definicja taryf
    Strefy cenowe
    Wagi i wymiary
    Synchronizacja z API

    4. Zarządzanie Rabatami#

    Definicja rabatów
    Warunki promocji
    Walidacja uprawnień
    Automatyczne naliczanie

    5. Operacje Finansowe#

    Przetwarzanie płatności
    Generowanie faktur
    Zarządzanie saldami
    Raportowanie finansowe

    Rozszerzone Komponenty:#

    ✅ Wszystkie encje biznesowe
    ✅ Kompletne przepływy procesów
    ✅ Integracje zewnętrzne
    ✅ Systemy bazodanowe
    ✅ Kolejki asynchroniczne
    ✅ Panel administracyjny
    ✅ 25+ przewoźników
    ✅ Event sourcing
    ✅ Clean Architecture

    Instrukcja Użycia:#

    1.
    Skopiuj cały kod XML
    2.
    Otwórz Draw.io (diagrams.net)
    3.
    File → Import From → Text
    4.
    Wklej kod i kliknij Import
    5.
    Dostosuj według potrzeb
    6.
    Eksportuj jako PNG/PDF
    Diagram zawiera teraz kompletny przepływ wszystkich procesów biznesowych systemu Minotaur!
            <!-- Process Descriptions -->
            <mxCell id="process-desc" value="Kompletne Procesy Biznesowe:&#xa;&#xa;1. Autoryzacja użytkownika i sprawdzenie ról&#xa;2. Zarządzanie zamówieniami (CRUD)&#xa;3. Zarządzanie produktami i usługami&#xa;4. Zarządzanie dodatkami (addons)&#xa;5. Zarządzanie cennikami i taryfami&#xa;6. Zarządzanie rabatami i promocjami&#xa;7. Tworzenie przesyłek z walidacją płatności&#xa;8. Asynchroniczna komunikacja z przewoźnikami&#xa;9. Śledzenie statusów przesyłek&#xa;10. Zarządzanie klientami i operacjami finansowymi&#xa;11. Integracja z zewnętrznymi systemami" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Technical Components -->
            <mxCell id="tech-desc" value="Komponenty Techniczne:&#xa;&#xa;• Sonata Admin Panel - interfejs użytkownika&#xa;• Symfony Messenger - system wiadomości&#xa;• RabbitMQ - kolejki asynchroniczne&#xa;• MySQL - dane biznesowe (Orders, Users, Products)&#xa;• MongoDB - event store i dokumenty&#xa;• Redis - cache i sesje&#xa;• Backend API - bridge do przewoźników&#xa;• External APIs - GUS, VEIS, Google Maps&#xa;• Zoho CRM - dane klientów&#xa;• Tariff API - dane cenowe" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="500" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Business Entities -->
            <mxCell id="entities-desc" value="Encje Biznesowe:&#xa;&#xa;• User - użytkownicy/klienci&#xa;• Order - zamówienia przesyłek&#xa;• Product - produkty/usługi kurierskie&#xa;• Addon - dodatkowe usługi&#xa;• Carrier - przewoźnicy&#xa;• FinancialOperation - operacje finansowe&#xa;• Invoice - faktury&#xa;• TradeDocuments - dokumenty handlowe&#xa;• OrderEvent - zdarzenia zamówień&#xa;• OrderTrackingHistory - historia śledzenia" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="950" y="1000" width="400" height="200" as="geometry" />
            </mxCell>
    
            <!-- Color Legend -->
            <mxCell id="legend-title" value="LEGENDA" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;fontStyle=1;" vertex="1" parent="1">
              <mxGeometry x="50" y="1250" width="100" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-start" value="Start/End" style="ellipse;whiteSpace=wrap;html=1;fillColor=#27ae60;strokeColor=#229954;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1290" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-process" value="Process" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#3498db;strokeColor=#2980b9;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1330" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-decision" value="Decision" style="rhombus;whiteSpace=wrap;html=1;fillColor=#f39c12;strokeColor=#e67e22;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1370" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-queue" value="Queue" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#9b59b6;strokeColor=#8e44ad;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1410" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-db" value="Database" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#95a5a6;strokeColor=#7f8c8d;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1450" width="80" height="30" as="geometry" />
            </mxCell>
    
            <mxCell id="legend-external" value="External" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e74c3c;strokeColor=#c0392b;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="50" y="1490" width="80" height="30" as="geometry" />
            </mxCell>
    
            <!-- Flow Types -->
            <mxCell id="flow-desc" value="Typy Przepływów:&#xa;&#xa;→ Stała linia - przepływ synchroniczny&#xa;⇢ Przerywana linia - przepływ asynchroniczny&#xa;◇ Romb - punkt decyzyjny&#xa;▭ Prostokąt - proces/operacja&#xa;○ Elipsa - start/koniec procesu&#xa;&#xa;Kluczowe Zalety Architektury:&#xa;• Asynchroniczność - nieblokujące operacje&#xa;• Skalowalność - kolejki RabbitMQ&#xa;• Niezawodność - ponowne próby i dead letter queues&#xa;• Izolacja - separacja komponentów&#xa;• Monitorowanie - event store i logi" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="200" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- Supported Carriers -->
            <mxCell id="carriers-desc" value="Obsługiwani Przewoźnicy (25+):&#xa;&#xa;• DHL (Express, Freight, International)&#xa;• DPD&#xa;• InPost (International, QuickReturn)&#xa;• FedEx (Domestic, International)&#xa;• UPS&#xa;• GLS&#xa;• Poczta Polska (Palety)&#xa;• Raben&#xa;• Rhenus&#xa;• Hellmann&#xa;• KuehneNagel&#xa;• Landmark&#xa;• AmbroExpress&#xa;• CARGUS&#xa;• Eurohermes&#xa;• Olza&#xa;• Paczka w Ruchu&#xa;• Pekaes&#xa;• Spring&#xa;• SUUS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="650" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- System Features -->
            <mxCell id="features-desc" value="Funkcje Systemu:&#xa;&#xa;• Panel administracyjny Sonata&#xa;• Zarządzanie użytkownikami i rolami&#xa;• CRUD operacje na zamówieniach&#xa;• Konfiguracja produktów i usług&#xa;• System dodatków (addons)&#xa;• Zarządzanie cennikami&#xa;• System rabatów i promocji&#xa;• Automatyczne tworzenie przesyłek&#xa;• Śledzenie statusów w czasie rzeczywistym&#xa;• Integracja z systemami zewnętrznymi&#xa;• Raporty i analityka&#xa;• Event sourcing&#xa;• Asynchroniczne przetwarzanie&#xa;• Skalowalna architektura" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="1">
              <mxGeometry x="1100" y="1250" width="400" height="300" as="geometry" />
            </mxCell>
    
            <!-- Additional Process Flows -->
            <!-- Product Management Flow -->
            <mxCell id="product-flow" value="Product Management Flow:&#xa;&#xa;1. Definicja produktów/usług&#xa;2. Konfiguracja parametrów&#xa;3. Przypisanie do przewoźników&#xa;4. Ustawienie cen i taryf&#xa;5. Aktywacja/deaktywacja&#xa;6. Monitoring wykorzystania" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="50" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Addon Management Flow -->
            <mxCell id="addon-flow" value="Addon Management Flow:&#xa;&#xa;1. Definicja dodatkowych usług&#xa;2. Konfiguracja warunków&#xa;3. Ustawienie cen addonów&#xa;4. Kompatybilność z produktami&#xa;5. Automatyczne dodawanie&#xa;6. Raportowanie wykorzystania" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="400" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Pricing Management Flow -->
            <mxCell id="pricing-flow" value="Pricing Management Flow:&#xa;&#xa;1. Definicja taryf&#xa;2. Ustawienie stref cenowych&#xa;3. Konfiguracja wag i wymiarów&#xa;4. Ustawienie cen specjalnych&#xa;5. Walidacja cen&#xa;6. Synchronizacja z API" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="750" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Discount Management Flow -->
            <mxCell id="discount-flow" value="Discount Management Flow:&#xa;&#xa;1. Definicja rabatów&#xa;2. Ustawienie warunków&#xa;3. Konfiguracja promocji&#xa;4. Walidacja uprawnień&#xa;5. Automatyczne naliczanie&#xa;6. Raportowanie rabatów" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="1100" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Financial Operations Flow -->
            <mxCell id="financial-flow" value="Financial Operations Flow:&#xa;&#xa;1. Przetwarzanie płatności&#xa;2. Generowanie faktur&#xa;3. Zarządzanie saldami&#xa;4. Raportowanie finansowe&#xa;5. Integracja z systemami&#xa;6. Audyt operacji" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;fontSize=11;fontColor=#2c3e50;" vertex="1" parent="1">
              <mxGeometry x="1450" y="1550" width="300" height="120" as="geometry" />
            </mxCell>
    
            <!-- Footer -->
            <mxCell id="footer" value="Minotaur - System Zarządzania Logistyką Globkurier | Architektura Clean Architecture | Symfony 7.0 | RabbitMQ | MySQL/MongoDB/Redis" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontStyle=1;fontColor=#7f8c8d;" vertex="1" parent="1">
              <mxGeometry x="400" y="1700" width="800" height="30" as="geometry" />
            </mxCell>
    
          </root>
        </mxGraphModel>
      </diagram>
    </mxfile>

    User
    na podstawie repozytorium minotaur i panelu administracyjnego oraz tej tabelki Brak możliwości pełnych operacji na danych klientów, zamówieniach przez dział BOK powoduje częste angażowanie pracowników IT w prace operacyjne Oddanie jak największej ilości operacji na danych dla pracowników BOK poprzez panel administracyjny Wyzwania biznesowe:
    • Mniejszy koszt osobowy IT
    • Mniej interwencji i zgłoszeń supportowych
    • Niezależność i szybkość działania pracowników BOK w realizacji zgłoszeń od klientów
    Wyzwania technologiczne:
    • Nowy serwis odpowiedzialny za zarządzanie administracyjne danymi klientów
    • Spójny interfejs graficzny dla wszystkich operacji
    • Łatwość w rozwoju i utrzymaniu
    • Nowoczesne i wspierane technologie
    • Wdrożenie ról i uprawnień dla pracowników
    • nowa metoda zarządzania operacjami logistycznymi Atena
    Przestarzałe, niewspierane technologie w obecnym panelu administracyjnym powodują długie czasy realizacji zmian i duże koszty ich wprowadzania Zmniejszenie kosztu wdrażania zmian i dostosowywania dla pracowników oraz stosowanie technologii , które są popularne na rynku (mniejszy próg wejścia nowego pracownika – programisty).
    Poprawa komfortu pracy pracowników wewnętrznych korzystających z narzędzia Wyzwania biznesowe:
    • Koszt początkowy stworzenia panelu – wymaga inwestycji, zanim pojawią się oszczędności.
    • Zarządzanie zmianą – przejście na nowe technologie może wiązać się z koniecznością przeszkolenia zespołu, dostosowania procesów i utrzymania dwóch wersji panelu przez okres przejściowy.
    • Zgodność z istniejącymi systemami – konieczność zapewnienia kompatybilności z aktualnymi integracjami, bazą danych i logiką domenową.
    Wyzwania technologiczne:
    • Zachowanie ciągłości działania – nowy system powinien być wdrażany stopniowo i wspierać działające procesy
    • Nowe technologie wspierane i popularne na rynku
    • Wytworzenie nowej architektury, wzorców, projektu
    • Zastosowanie framework wspierającego procesy administracyjne systemów
    • Modularność systemu nowa metoda zarządzania operacjami logistycznymi Atena
    Wykorzystywanie w organizacji wielu różnych systemów przez rożne obszary powoduje duży koszt utrzymania równoległego systemów, ich integracji, zachowania spójności danych Przeniesienie wszystkich procesów administracyjnych organizacji do jednego (maksymalnie dwóch) panelu administracyjnego.
    • Spójność danych w czasie rzeczywistym
    • Ułatwienie pracy operacyjnej i zmniejszenie liczby narzędzi wymaganych do realizacji zadań
    • Redukcję kosztów licencyjnych, integracyjnych i infrastrukturalnych
    • Możliwość zarządzania uprawnieniami i konfiguracją z jednego źródła Wyzwania biznesowe:
    • Zarządzanie zmianą i oporem organizacyjnym – pracownicy przyzwyczajeni do starych systemów mogą opierać się zmianie, a migracja wymaga dokładnego zrozumienia ich potrzeb.
    • Koszt wdrożenia nowego centralnego panelu – konsolidacja systemów to inwestycja wymagająca czasu, planowania i środków finansowych.
    • Ryzyko przerw operacyjnych – scalanie procesów może prowadzić do przejściowego spadku efektywności operacyjnej, jeśli nie zostanie dobrze zaplanowane.
    • Zarządzanie priorytetami wdrożenia – nie wszystkie obszary organizacji będą gotowe na migrację w tym samym czasie.
    Wyzwania technologiczne:
    • Złożona migracja danych i logiki biznesowej – przeniesienie funkcji z wielu systemów do jednego wymaga dogłębnej analizy, refaktoryzacji i zapewnienia zgodności historycznej.
    • Projektowanie elastycznej architektury – konieczne jest stworzenie panelu, który można rozszerzać o nowe moduły.
    • Integracja z systemami zewnętrznymi, które nie mogą być usunięte – nowy panel musi czasami nadal komunikować się z istniejącymi narzędziami (np. ERP, CRM, systemy fakturowania).
    • Zarządzanie uprawnieniami i bezpieczeństwem w ujednoliconym systemie – większy zasięg jednego narzędzia wymaga bardzo precyzyjnego i skalowalnego modelu kontroli dostępu.
    • Wydajność i skalowalność – pojedynczy system musi być w stanie obsłużyć wszystkie procesy organizacyjne bez utraty szybkości działania. nowa metoda zarządzania operacjami logistycznymi Atena
    opisz mi cel projektu, zalozenia do projektu

    Cursor
    Na podstawie analizy repozytorium Minotaur i przedstawionych wyzwań biznesowych, opisuję cel i założenia projektu:

    �� CEL PROJEKTU ATHENA#

    Główny Cel#

    Stworzenie nowoczesnego, uniwersalnego panelu administracyjnego dla systemu logistycznego Globkurier, który zastąpi przestarzałe rozwiązania i umożliwi pełną samodzielność operacyjną pracowników BOK bez konieczności angażowania działu IT w codzienne operacje.

    Cele Szczegółowe#

    1. Operacyjne#

    Eliminacja zależności od IT w codziennych operacjach BOK
    Pełne zarządzanie danymi klientów przez pracowników operacyjnych
    Samodzielne zarządzanie zamówieniami bez interwencji programistów
    Szybka realizacja zgłoszeń klientów bez oczekiwania na IT

    2. Technologiczne#

    Modernizacja architektury z przestarzałych na nowoczesne technologie
    Konsolidacja systemów do jednego uniwersalnego panelu
    Redukcja kosztów utrzymania i rozwoju systemów
    Zwiększenie elastyczności w dostosowywaniu do potrzeb biznesowych

    3. Biznesowe#

    Redukcja kosztów osobowych IT poprzez mniej interwencji
    Przyspieszenie procesów biznesowych przez samodzielność BOK
    Poprawa jakości obsługi klienta przez szybkość reakcji
    Optymalizacja kosztów licencyjnych i infrastrukturalnych

    📋 ZAŁOŻENIA PROJEKTU#

    Założenia Architektoniczne#

    1. Technologia#

    2. Architektura#

    Clean Architecture - separacja warstw
    Domain-Driven Design - logika biznesowa w domenie
    Event Sourcing - pełna historia zdarzeń
    Microservices Ready - modularność systemu
    API-First - integracja z systemami zewnętrznymi

    3. Bezpieczeństwo#

    Role-Based Access Control (RBAC) - precyzyjne uprawnienia
    Audit Trail - pełne logowanie operacji
    Data Encryption - szyfrowanie wrażliwych danych
    Session Management - bezpieczne sesje użytkowników

    Założenia Funkcjonalne#

    1. Moduły Administracyjne#

    2. Interfejs Użytkownika#

    Intuicyjny design - łatwość obsługi dla BOK
    Responsywny layout - dostęp z różnych urządzeń
    Szybkie filtry - efektywne wyszukiwanie
    Masowe operacje - wydajność przy dużej ilości danych
    Real-time updates - aktualizacje w czasie rzeczywistym

    Założenia Operacyjne#

    1. Wdrożenie#

    Faza 1: Podstawowe moduły (Users, Orders)
    Faza 2: Zaawansowane funkcje (Products, Financial)
    Faza 3: Integracje i automatyzacja
    Faza 4: Optymalizacja i rozszerzenia

    2. Migracja#

    Stopniowe przejście - bez przestojów operacyjnych
    Równoległe działanie - stary i nowy system
    Migracja danych - zachowanie historii
    Szkolenia zespołu - przygotowanie użytkowników

    3. Wsparcie#

    Dokumentacja użytkownika - szczegółowe instrukcje
    Szkolenia praktyczne - hands-on training
    Support techniczny - pomoc w przejściu
    Monitoring - śledzenie wykorzystania

    Założenia Techniczne#

    1. Wydajność#

    2. Skalowalność#

    Horizontal scaling - dodawanie serwerów
    Database sharding - podział danych
    Caching strategy - Redis dla wydajności
    Load balancing - rozkład obciążenia

    3. Integracje#

    Założenia Biznesowe#

    1. ROI (Return on Investment)#

    Redukcja kosztów IT o 40-60%
    Przyspieszenie procesów o 50-70%
    Zmniejszenie błędów o 30-50%
    Zwiększenie satysfakcji klientów

    2. Sukces Projektu#

    Samodzielność BOK - 0 interwencji IT w operacjach
    Czas realizacji zgłoszeń < 15 minut
    Dostępność systemu > 99.9%
    Satisfaction rate > 90%

    3. Ryzyka i Mitigacje#


    �� PODSUMOWANIE#

    Projekt Athena to strategiczna inicjatywa modernizacji systemu logistycznego Globkurier, której celem jest:
    1.
    Eliminacja zależności od IT w operacjach BOK
    2.
    Modernizacja technologiczna z przestarzałych na nowoczesne rozwiązania
    3.
    Konsolidacja systemów do jednego uniwersalnego panelu
    4.
    Optymalizacja kosztów i zwiększenie efektywności operacyjnej
    Projekt opiera się na sprawdzonych technologiach (Symfony, Sonata), nowoczesnej architekturze (Clean Architecture, DDD) i elastycznym podejściu do wdrożenia, zapewniając sukces biznesowy przy minimalizacji ryzyk technologicznych.
    Modified at 2025-08-22 15:17:55
    Next
    Introduction (PL)
    Built with