The journey of a parcel

lifecycle

Every state a parcel can reach, and the only moves between them

courier vehicle_load scan [a stop exists on today's route] / text the recipient their two-hour windowsystem next working day [fewer than two attempts used] / add a stop to tomorrow's routesystem five working days elapsed / notify the merchant that it is coming backcourier delivery scan / publish parcel.delivered and notify the merchantrecipient reschedule or redirect / book the chosen day and confirm by SMSsystem ten days without a scan / open a claim and credit the merchantcourier attempt_failed scan / record the reason and a doorstep photosystem depot_outbound scan [the destination depot is not this one]courier collection scan / start the clock on the service promisecourier return scan at origin depot / raise the return chargesystem two attempts used / text the recipient their optionsmerchant cancel [no scan has been taken] / void the labelcourier any scan / close the claim as foundsystem ten days without a scancourier depot_inbound scancourier depot_inbound scanCreated · [initial] · Booked and labelled, still on the merchant's shelf · next: merchantCreatedBooked and labelled,still on the merchant'snext: merchantCollected · [normal] · In Relay's hands, not yet sorted · next: courierCollectedIn Relay's hands, not yetsortednext: courierAt depot · [normal] · Sorted and waiting for the next leg · next: systemAt depotSorted and waiting forthe next legnext: systemIn transit · [normal] · On a trunk vehicle between two depots · next: systemIn transitOn a trunk vehiclebetween two depotsnext: systemOut for delivery · [normal] · On a van, with a sequenced stop and a promised window · next: courierOut for deliveryOn a van, with asequenced stop and anext: courierAttempt failed · [failure] · Nobody in, or no safe place. Back to the depot tonight. · next: systemAttempt failedNobody in, or no safeplace. Back to the depotnext: systemAwaiting instruction · [waiting] · Parked until the recipient chooses what happens next · next: recipientAwaiting instructionParked until the recipientchooses what happens nextnext: recipientReturning · [normal] · Heading back to the merchant · next: systemReturningHeading back to themerchantnext: systemDelivered · [terminal] · Handed over, or left in the agreed safe place with a photoDeliveredHanded over, or left inthe agreed safe placeReturned · [terminal] · Back with the merchant. Charged as a failed delivery.ReturnedBack with the merchant.Charged as a failedCancelled · [terminal] · Withdrawn before Relay ever took itCancelledWithdrawn before Relayever took itLost · [failure] · No scan for ten days. A claim is opened automatically.LostNo scan for ten days. Aclaim is openedcourier vehicle_load scan [a stop exists on today's route] / text the recipient their two-hour windowcourier: vehicle_load scan[a stop exists on today's route]/ text the recipient their two-hour w…system next working day [fewer than two attempts used] / add a stop to tomorrow's routesystem: next working day[fewer than two attempts used]/ add a stop to tomorrow's routesystem five working days elapsed / notify the merchant that it is coming backsystem: five working days elapsed/ notify the merchant that it is comi…courier delivery scan / publish parcel.delivered and notify the merchantcourier: delivery scan/ publish parcel.delivered and notify…recipient reschedule or redirect / book the chosen day and confirm by SMSrecipient: reschedule or redirect/ book the chosen day and confirm by …system ten days without a scan / open a claim and credit the merchantsystem: ten days without a scan/ open a claim and credit the merchantcourier attempt_failed scan / record the reason and a doorstep photocourier: attempt_failed scan/ record the reason and a doorstep ph…system depot_outbound scan [the destination depot is not this one]system: depot_outbound scan[the destination depot is not this on…courier collection scan / start the clock on the service promisecourier: collection scan/ start the clock on the service prom…courier return scan at origin depot / raise the return chargecourier: return scan at origin depot/ raise the return chargesystem two attempts used / text the recipient their optionssystem: two attempts used/ text the recipient their optionsmerchant cancel [no scan has been taken] / void the labelmerchant: cancel[no scan has been taken]/ void the labelcourier any scan / close the claim as foundcourier: any scan/ close the claim as foundsystem ten days without a scansystem: ten days without a scancourier depot_inbound scancourier: depot_inbound scancourier depot_inbound scancourier: depot_inbound scan
drag to pan · wheel to zoom · click a node · Esc clears

Why it is shaped like this

  • Two delivery attempts, then the parcel stops moving until a human decides — vans are the scarce resource, not warehouse shelves
  • Lost is recoverable: parcels turn up, and a found parcel rejoins at the depot that scanned it

Watch out

  • Scans arrive out of order from offline handhelds, so a transition can be evaluated against a scan older than the current state
  • Only a scan moves a parcel forward. There is no manual status edit, by design.