The Courier App is theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/CRISTIANCAMACH34/Zippi/llms.txt
Use this file to discover all available pages before exploring further.
delivery_driver role’s dedicated surface, accessible at /app/driver. It is purpose-built for one job: executing deliveries safely and traceably. Couriers see only their own assigned orders, upload evidence at each handoff, report exceptions, and track personal cash collected on delivery.
The
delivery_driver role has scope self. A courier can only see, update, and act on their own deliveries. They have no visibility into other couriers’ assignments, the business’s order queue, or any financial data beyond their personal cash tracking.The delivery_driver Role
| Attribute | Value |
|---|---|
| Surface | courier_app |
| Home Route | /app/driver |
| Default Scope | self |
| Modules | courier_app |
Permissions
How Assignments Arrive
When city dispatch (operations withdispatch.manage) assigns a courier to a ready order, the assignment appears in the courier’s active queue via:
MAX_ACTIVE_ORDERS_PER_COURIER) to prevent overloading a single driver.
MAX_ACTIVE_ORDERS_PER_COURIER is a platform-level configuration value. When a courier has reached this limit, dispatch cannot assign additional orders to them until one of their current deliveries is completed or resolved.Delivery State Transitions
The courier drives the delivery through a defined sequence of states. Each transition requires the corresponding permission and is validated by the backend on submission.Happy Path
Exception States
When delivery cannot be completed normally, the courier triggers one of two exception transitions:| Transition | Permission | Meaning |
|---|---|---|
mark_failed | orders.mark_failed | Delivery failed — access issue, wrong address, etc. |
mark_absent | orders.mark_absent | Customer was not present at the address |
orders.reschedule) or escalate to Fallido or Reembolsado.
Receive Assignment
The order appears in the courier’s active queue once dispatch assigns it or the courier accepts an offer.
Pick Up at Business
The courier arrives at the business location and marks the order as
Recogido using orders.pickup. This triggers the evidence-upload checkpoint for the pickup photo if configured.En Route
The courier marks
orders.transit once they leave the business. Navigation details (customer address, contact) are displayed on screen.Deliver or Handle Exception
At the customer’s address, the courier marks
orders.deliver upon successful handoff. If the customer is not present they use orders.mark_absent; if delivery fails for another reason, orders.mark_failed.Evidence Upload
Delivery evidence (photos, signatures, notes) is uploaded as part of the order’s audit trail. The courier interacts with the evidence module directly:| Permission | Action |
|---|---|
evidence.read | View previously uploaded evidence for their own deliveries |
evidence.manage | Upload a new photo, signature, or note attached to an order transition |
evidence.read or evidence.manage on the admin side can view and validate them to resolve disputes.
Incident Reporting
Couriers can report operational incidents — a damaged item, an unsafe situation, an address dispute — directly from the delivery screen:| Permission | Action |
|---|---|
incidents.read | View incidents they have reported |
Couriers hold
incidents.read only. They can view the incidents they have submitted but cannot manage or resolve them. Incident resolution is handled by support_agent, operations_admin, or city_admin.Personal Cash Management
Couriers who collect payment on delivery (cash-on-delivery orders) accumulate a personal cash balance during their shift. The courier app surfaces this balance and the history of cash collections, all scoped to the individual driver. Couriers holdcouriers.read scoped to self, which enables them to view their own courier profile, current assignment load, and earnings summary. They do not see other couriers’ data.
Fleet Management (Admin Side)
Fleet administration is handled by roles withcouriers.manage — not the courier themselves. Admins use the couriers module to register new drivers, update their status, and view delivery history:
scope=self — they see only their own record.
Scope Enforcement
Because thedelivery_driver role uses scope=self, every backend query involving this role is automatically restricted to the authenticated courier’s own data. There is no route through which a courier can access another driver’s assignments, evidence, or cash records.