Delivery GroupETA & remaining points

Timeslot route → points → groups of (couriers + 2), two-group unlock window, and the promise sent to Hybris.

Couriers
2
Group size
4
Avg / order
3′
Actual / order
3′
Warehouse → city
Sim clock
09:00
Unlocked groups
A + B
Delivery group (dynamic)
[1, 2, 3, 4]
Unlocked through
point 4
Active points
4
Deliverable and IN_ROUTE_FIXED Completed Locked and IN_ROUTE

Customer view

via Hybris, on their phone
ETA
09:18
Remaining points
0
INSIDEpoint is in the delivery group

Selected point

from the board · act on the route
1Tai Po CentreDeliverable
Orders done
0 / 3
IN_ROUTE_FIXED at
—
Modelling assumptions
  1. Group size = couriers + 2. Default 2 couriers → 4 points per group. Changing the courier count re-groups the same 16 points live.
  2. Unlock window. Only two adjacent groups are open: the earliest group that still has an incomplete point (ACTIVE) and the group right after it (READY-ACTIVE). Anything beyond the second group stays locked until the ACTIVE group is fully complete — that is why one unfinished point blocks the rest of the route.
  3. Point-level 1:1 unlocking. Every completed point unlocks exactly one more point of the next group, in sequence (4 completed points in Group A → all 4 points of Group B). The pointer slides on any completion inside the window, which is what produces the doc's [1,6,7,8] delivery group and lets the courier finish [2–8] while point 1 is still untouched.
  4. Inside the delivery group: ETA = the clock time at which that point changed to Deliverable and IN_ROUTE_FIXED. Every point that is deliverable by default (points 1–4 at dispatch) is fixed at the initial 09:00 and therefore shares it; a point that unlocks later is stamped the moment it transitions, so it carries that later time (e.g. 09:25). The stamp is pushed to Hybris at the same instant and never moves again. remaining = active points − 1.
  5. Two ETA kinds, labelled as such. A Deliverable point shows ETA: HH:mm — the frozen stamp, which never moves however often Hybris calls. A point still at Locked and IN_ROUTE shows ETA if call Hybris now: HH:mm — a live figure: now + the orders still ahead × avg, recalculated as the route progresses. There is no manual call step; the locked figure updates as the route progresses.
  6. Outside the delivery group: ETA = now + (all orders in my point + incomplete orders ahead) × avg delivery time per order — never in the past. Completing an order ahead removes avg minutes of work while the clock advances by the actual pace, so the ETA drifts earlier when the courier beats the average and holds steady when he matches it. remaining = my point position − earliest active point position (1-based, as in the example 10 − 2 = 8).
  7. Warehouse → city time is the leg from depot to the first estate, before any delivery can happen. It moves the start of the run, so the first group's ETA shifts and every later group shifts with it — the leg is spent once, never compounded per group. Set it with the header control; 0 means no leg.
  8. State text is a pair: deliverability first, then the order status. A deliverable point is always Deliverable and IN_ROUTE_FIXED (the fix is automatic at the transition); an unreached point is Locked and IN_ROUTE. A locked point is never actioned — the buttons disable and the model refuses.
  9. Per-point granularity: every order inside one point gets the same ETA / remaining value (the spec computes per point, not per order within a point).