@startuml title Request Pickup (Fast Path) actor "Factory Officer" as FO participant "Public Site (FE)" as Web participant "Backend (Django)" as API actor "Staff (Web Admin)" as Staff actor Driver participant "Weigh Station" as Scale participant Billing FO -> Web: Open "Sell Scrap" (Request Pickup) Web --> FO: Show form (materials, qty, photos, address, time) FO -> Web: Submit form (+photos) Web -> API: POST /pickup-request API -> API: Create Lead (org, details) API --> Staff: Notify (inbox/email) Staff -> API: Create/attach Customer + Site Staff -> API: Create PickupOrder (status=requested) Staff -> API: Schedule + Assign Driver API --> FO: Confirmation (schedule) Driver -> FO: Arrive and collect Driver -> Scale: Weigh materials Scale -> API: Record WeighTicket + lines API -> Billing: Generate Invoice or Payout Billing --> FO: Invoice/Payout issued FO -> Billing: Pay / Receive funds API -> API: Mark Pickup completed @enduml @startuml title Get Bids (Marketplace Path) actor "Factory Officer" as FO participant "Public Site (FE)" as Web participant "Backend (Django)" as API actor "Staff (Web Admin)" as Staff actor "Recycler(s)" as Rec actor Driver participant "Weigh Station" as Scale participant Billing FO -> Web: "Sell Scrap" → Get Bids Web --> FO: Listing form (title, materials, qty, photos, reserve, ends) FO -> Web: Submit request Web -> API: POST listing-request API -> API: Create Draft ScrapListing (or Lead: listing_request) Staff -> API: Review + Publish (public or invite-only) API --> Rec: Listing visible / invites sent Rec -> API: Place Bid(s) Staff -> API: Close listing at end time Staff -> API: Award winning bid API -> API: Create PickupOrder from award Driver -> FO: Collect materials Driver -> Scale: Weigh materials Scale -> API: Record WeighTicket + lines API -> Billing: Generate Invoice or Payout Billing --> FO: Invoice/Payout issued API -> API: Mark Pickup completed @enduml