|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