|Generate unique codes| DB D -->|Request barcode| BC C -->|Request barcode| BC DB -->|Provide barcode| D DB -->|Provide barcode| C %% Printing Flow D -->|Print barcode| PB["Printed Barcode"] C -->|Print barcode| PB %% Scanning Flow R -->|Scan at pickup| VS R -->|Scan at dropoff| VS VS -->|Validate internal code| DB EX -->|External barcode| VS VS -->|Validate external code| EX %% Status Updates VS -->|Update status| DB DB -->|Confirm scan| R style System fill:#f9f,stroke:#333,stroke-width:2px style Actors f"> |Generate unique codes| DB D -->|Request barcode| BC C -->|Request barcode| BC DB -->|Provide barcode| D DB -->|Provide barcode| C %% Printing Flow D -->|Print barcode| PB["Printed Barcode"] C -->|Print barcode| PB %% Scanning Flow R -->|Scan at pickup| VS R -->|Scan at dropoff| VS VS -->|Validate internal code| DB EX -->|External barcode| VS VS -->|Validate external code| EX %% Status Updates VS -->|Update status| DB DB -->|Confirm scan| R style System fill:#f9f,stroke:#333,stroke-width:2px style Actors f"> |Generate unique codes| DB D -->|Request barcode| BC C -->|Request barcode| BC DB -->|Provide barcode| D DB -->|Provide barcode| C %% Printing Flow D -->|Print barcode| PB["Printed Barcode"] C -->|Print barcode| PB %% Scanning Flow R -->|Scan at pickup| VS R -->|Scan at dropoff| VS VS -->|Validate internal code| DB EX -->|External barcode| VS VS -->|Validate external code| EX %% Status Updates VS -->|Update status| DB DB -->|Confirm scan| R style System fill:#f9f,stroke:#333,stroke-width:2px style Actors f">
flowchart TD
    subgraph System["System Components"]
        BC["Barcode Generation Service"]
        DB["Barcode Database"]
        VS["Validation Service"]
    end

    subgraph Actors["User Actors"]
        D["Dispatchers"]
        R["Riders"]
        C["Local Commerce"]
    end

    subgraph External["External Systems"]
        EX["External Barcodes"]
    end

    %% Barcode Generation Flow
    BC -->|Generate unique codes| DB
    D -->|Request barcode| BC
    C -->|Request barcode| BC
    DB -->|Provide barcode| D
    DB -->|Provide barcode| C

    %% Printing Flow
    D -->|Print barcode| PB["Printed Barcode"]
    C -->|Print barcode| PB
    
    %% Scanning Flow
    R -->|Scan at pickup| VS
    R -->|Scan at dropoff| VS
    VS -->|Validate internal code| DB
    EX -->|External barcode| VS
    VS -->|Validate external code| EX

    %% Status Updates
    VS -->|Update status| DB
    DB -->|Confirm scan| R

    style System fill:#f9f,stroke:#333,stroke-width:2px
    style Actors fill:#bbf,stroke:#333,stroke-width:2px
    style External fill:#fbb,stroke:#333,stroke-width:2px
flowchart TD
    %% Pickup Process
    Start(["Start Delivery"]) --> ViewTask["View Task Details"]
    ViewTask --> ArriveP["Mark Arrived at Pickup"]
    ArriveP --> ScanP["Open Scanner"]
    ScanP --> ValidateP{"Validate Code"}
    ValidateP -->|Valid| ConfirmP["Confirm Pickup"]
    ValidateP -->|Invalid| RetryP["Show Error"]
    RetryP --> ScanP
    ConfirmP --> MultiP{"Multiple Packages?"}
    MultiP -->|Yes| ScanP
    MultiP -->|No| CompleteP["Complete Pickup"]
    
    %% Transit
    CompleteP --> Transit["In Transit Status"]
    
    %% Dropoff Process
    Transit --> ArriveD["Mark Arrived at Dropoff"]
    ArriveD --> ScanD["Open Scanner"]
    ScanD --> ValidateD{"Validate Code"}
    ValidateD -->|Valid| ConfirmD["Confirm Dropoff"]
    ValidateD -->|Invalid| RetryD["Show Error"]
    RetryD --> ScanD
    ConfirmD --> MultiD{"Multiple Packages?"}
    MultiD -->|Yes| ScanD
    MultiD -->|No| CompleteD["Complete Dropoff"]
    CompleteD --> Sign{"Signature Required?"}
    Sign -->|Yes| GetSign["Collect Signature"]
    Sign -->|No| Final["Mark Complete"]
    GetSign --> Final
    Final --> NewTask{"New Task?"}
    NewTask -->|Yes| ViewTask
    NewTask -->|No| End(["End Shift"])
    
    %% Offline Handling
    ValidateP -.->|No Connection| OfflineP["Store Offline"]
    ValidateD -.->|No Connection| OfflineD["Store Offline"]
    OfflineP -.->|Restored| CompleteP
    OfflineD -.->|Restored| CompleteD
    
    %% Styling
    classDef error fill:#ffebee,stroke:#c62828
    classDef success fill:#e8f5e9,stroke:#2e7d32
    classDef process fill:#f5f5f5,stroke:#333
    
    class RetryP,RetryD error
    class ConfirmP,ConfirmD,Final success
    class ViewTask,ArriveP,ArriveD,ScanP,ScanD process