Guide

Everything you need to run Énroute end to end: the exact file formats it expects, what every setting and dashboard tab does, and how credits, review tools and templates work.

1. Quick start

  1. Download the two template CSVs below and match your data to their exact column headers.
  2. Go to New run, upload both files, set your depot location, country and max delivery distance, then click Optimize.
  3. Review the plan across the dashboard tabs, approve or re-run clusters you're not happy with, then download driver day-plans or the approved-routes CSV.

2. Input files

Two CSV files are required for every run. Column names must match exactly (case-sensitive) — download the templates below and keep the header row as-is.

Combined orders + stores file

One row per delivery line — your sales orders joined with store/address details.

Truck fleet file

One row per truck available for this run.

Combined file — column reference

ColumnMeaning
Doc NoSales order / document number. Multiple rows can share the same Doc No (one order, several line items) — they're grouped as one stop.
DateOrder date, DD-MM-YYYY. Not used for routing, kept for reference on exports.
Company NameStore or customer name — shown on the map, driver plans and exports.
AgentFree text — sales agent / route code. Carried through to output, not used by the optimizer.
Project / AreaFree text grouping fields, carried through to output.
Item CodeProduct/SKU code for this line. Informational.
Orig. QtyOrdered quantity for this line.
TotalWeightWeight of this line, in the same unit as truck tonnage (typically kg or tons — just stay consistent across both files). Summed per stop to check truck capacity.
DAddress1–4Delivery address lines, concatenated for display and exports.
PostCodeDelivery postcode. Informational — routing uses GEOLAT/GEOLONG.
GEOLAT / GEOLONGRequired. Decimal-degree latitude/longitude of the delivery point. Every row for a stop should carry the same coordinates.
UDF_OperateHourFree-text store operating hours shown in the UI (e.g. "MON-SAT 0830-1730").
Operating HoursThe time-window string actually enforced by the optimizer, e.g. "9.00-18.00". A stop's delivery must land inside this window or it's flagged as a violation.
UDF_UnloadTimeMinutes needed to unload at this stop. Added to the truck's clock when sequencing.
UDF_LorryTypeFree-text truck-size hint carried through to output/exports.
O/S QtyOutstanding quantity. Informational.
RestrictionFree text describing access restrictions (e.g. truck-size limits) shown alongside the stop; not enforced as a hard constraint.
SHIPPER … BRANCHNAMERemaining columns (SHIPPER, COMPANYCREATIONDATE, TARIFF, REMARK1/2, PERMITNO, VALIDITY, DELIVERYTERM, TERMS, CC, DOCREF2–4, BRANCHNAME) are carried through unchanged for your own records/exports — none of them affect routing.

Truck file — column reference

ColumnMeaning
truck_nameUnique identifier for the truck — shown on the map, clusters and driver plans.
tonnageCapacity, in the same unit as TotalWeight in the combined file. A cluster's total weight is never allowed to exceed this.
start_time24-hour HH:MM the truck leaves the depot. Used as the start of its route clock.
truck_segmentFree text tier, e.g. "high" / "low". Used to bias which trucks get priority/long-haul stops during clustering.
emailOptional. If set, this driver is emailed their delivery plan — assigned stops in order plus a Google Maps route link — as soon as the run completes.

ℹ Wrap any field containing a comma in double quotes (standard CSV escaping) — e.g. address lines like "NO 8, JALAN TASIK 2".

3. Run settings

Every field on the upload form except the two files themselves — what each one controls, and exactly how the three distance modes differ under the hood.

Depot & fleet basics

  • Country — determines the public-holiday calendar used by the "only due today" filter below, and (in "By area" mode's underlying data) which country's postcode/address conventions apply. Has no effect on Route length/Hop to hop clustering itself.
  • Origin latitude / longitude — your depot's coordinates. In Route length/Hop to hop mode every route's distance is measured starting from here. In By area mode it's still used as the starting point for sequencing stops within a cluster and for the driver's Google Maps link, even though it no longer caps anything.
  • Max distance (km) — a stop farther than this from the depot (Route length mode) or a leg farther than this between two consecutive stops (Hop to hop mode) is excluded from the run and reported as an exception rather than forced onto a route. Has no effect at all in By area mode — that mode ignores distance entirely by design, so this field is disabled on the form when "By area" is selected.
  • Time limit — seconds the solver is allowed to search for a better plan before returning its current best result. Only relevant to Route length/Hop to hop (which call the OR-Tools solver); By area mode doesn't use a solver at all, so this field doesn't apply there either.
  • Only keep deliveries due today — when a country is selected, filters the upload down to stops due on or before the next working day (skipping weekends and that country's public holidays), so you can run "today's deliveries only" without pre-filtering the CSV yourself. Applies the same way regardless of which distance mode you pick.
  • Username / run name — labels shown in your History list; doesn't affect routing.

Distance mode, in full

This is the single biggest lever on how a run gets clustered. All three modes still respect truck tonnage capacity, restriction/segment compatibility, and delivery time windows — what changes between them is purely how (or whether) distance limits which stops can share a truck.

Route length

Distance is estimated along a real road-network proxy (not a straight line), and every stop's distance from the depot accumulates as the truck's route builds up — a stop only joins a route if the truck's running total distance stays under Max distance after adding it. This is the closest of the three modes to "how far will this truck actually have to drive today," so it's the right default for most fleets watching fuel/time budgets.

Hop to hop

Distance is measured only between each pair of consecutive stops, not accumulated across the whole route — so Max distance here means "no single leg between two stops may exceed this," rather than "the whole route must stay under this." Cheaper to compute than Route length, and useful when your real constraint is "stops shouldn't be too spread out from each other" rather than total daily mileage.

By area

Distance is ignored completely — nothing here is measured against Max distance at all. Instead:

  1. Stops are grouped purely by geography using k-means clustering on latitude/longitude — one cluster is formed per truck you have available (or one per stop, if you have more trucks than stops).
  2. Each geographic cluster is then paired with a truck at random — not matched by size — reflecting "whichever truck is free covers whichever area" rather than hand-picking the best-fit truck per zone.
  3. If a cluster's total tonnage comes to 80% or more of its assigned truck's capacity, the weakest-fit stores — the ones farthest from that cluster's own geographic center — are trimmed out one at a time until what's left lands inside an 80-95% fill band. Trimmed-out stores become unassigned; everything kept ships as one route.
  4. If a cluster is under 80% fill even with every one of its stores included, there's nothing worth trimming toward a higher number — instead the whole cluster is either dispatched as-is (if it still clears a relaxed 70% floor) or left entirely unassigned (if it can't even clear 70%), rather than sending a truck out for a token load.
  5. Restriction/truck-segment compatibility is checked before any of the tonnage math above — a store a truck legally can't carry never counts toward that truck's fill percentage and always ends up unassigned regardless of tonnage.

Use this when you'd rather send a full truck deep into one geographic zone (a district, a cluster of towns) than spread a route thin chasing a distance target — think "clear out this whole neighborhood, however far it is, then come back," not "stay within X km." Because the truck-to-area pairing is random, re-running the exact same files in By area mode can produce a different (though similarly well-fitted) plan each time — that's expected, not a bug. No agent/solver round trip is involved either, so By area runs finish faster than the other two modes.

4. Credits & billing

  • Every account starts with 5 free optimization runs — 1 run consumes 1 credit.
  • Once your balance hits 0, the next credit-consuming action opens a top-up prompt instead of running — nothing is performed until you top up.
  • Credits are priced at ₹199 per credit, sold in packs of 1, 5 or 10; checkout is handled by Cashfree and accepts international cards as well as domestic Indian payment methods.
  • Your current balance is always visible in the header — click the + next to it anytime to top up proactively, not just when you're already out.
  • You'll also get an email the moment your balance reaches zero.

Every action that costs a credit

Exactly 1 credit each, checked and deducted the same way regardless of which one you use — running out blocks all seven equally, not just new Optimize submissions:

  • Optimize — submitting a fresh run, whether from the upload form, the REST API, or an MCP agent call (see section 14 — it's the same balance across all three).
  • Merge selected (Review tab) — combining clusters and re-optimizing them together.
  • Re-run disapproved (Review tab) — sending rejected clusters back through the full optimizer.
  • Cross-direction leftover pass / "Quick combine" (CrossDirection tab) — the fast, no-solver pass that fills idle trucks from whatever's unassigned.
  • Re-run leftover — sending only the still-unassigned stops through the full optimizer against your idle trucks.
  • Add urgent stop (Deliveries dashboard — Dynamic replanning) — inserting a new stop into a truck's in-progress trip, whether it succeeds or fits nowhere and is refused. See section 7.
  • Re-sequence remaining (Deliveries dashboard — Dynamic replanning) — reordering a trip's pending stops from the truck's current position. See section 7.

What's always free

  • Approve / Reject on its own (Review tab) — only Merge and Re-run actually re-optimize anything, so only those cost a credit. Approving or rejecting a cluster by itself is free.
  • Viewing results, History, Analytics, downloading driver plans or the approved-routes CSV, and the AI chat assistant (once unlocked by lifetime purchases — see section 11) — none of these consume your run balance, no matter how many times you use them.
  • Everything in the driver app and the Deliveries dashboard's monitoring/review side — logging in, delivery and return capture, photos, the driver timesheet, Approve/Reject on a delivered stop, and the Driver Calendar — is entirely free. Only the two Dynamic replanning actions above (which change the actual route) cost a credit; everything else on that dashboard is just visibility into what drivers are doing.

5. Reading the results dashboard

Above the tabs, a completed run shows an ✨ AI briefing — a couple of plain-English sentences explaining what the plan looks like and what needs attention (a bad batch of window violations, a cluster of unassigned stops), generated automatically and saved with the run so it's still there when you reopen it from History.

Below that, results open across these tabs:

  • Map — every stop and truck route plotted together; click a cluster to zoom in, click a stop for its window and load.
  • Cluster — the stop-by-stop sequence for one selected truck/cluster.
  • All stops — every stop across every cluster in one sortable table.
  • Capacity — tonnage used vs. each truck's limit, at a glance.
  • Fuel — estimated distance/fuel per truck.
  • Driver plans — a printable, stop-by-stop day-plan per driver (sequence, cumulative load, arrival window).
  • Violations — stops whose planned arrival falls outside their delivery time window.
  • Exceptions — stops that couldn't be placed on any route at all (e.g. too far from the depot, or no truck had capacity).

6. Cluster review & re-optimization

The Review tab lets you fine-tune a run without starting over:

  • Approve / Reject — mark clusters in or out of the final "approved" CSV download. Doesn't change routing.
  • Re-run disapproved — sends every rejected cluster's stops back through the full optimizer and stitches the fresh result into the run in place.
  • Merge selected — combine two or more clusters and re-optimize them together as one job (useful when the solver split a route more than it needed to).
  • Cross-direction leftover pass (in the CrossDirection tab) — a fast, no-solver pass that tries to fit whatever's still unassigned onto trucks that still have idle capacity, irrespective of direction, aiming to fill each one to 80-95% tonnage — trying a few different combinations per truck and re-sweeping trucks that came up short, rather than one single greedy pass. Safe to run more than once.
  • Re-run leftover — sends only the still-unassigned stops through the full optimizer against your idle trucks.
  • Every action above is recorded in the Activity panel at the bottom of the Review tab, with a timestamp, so you have an audit trail of who changed what on a run. Each one also costs 1 credit, same as a fresh Optimize submission — if you're out of credits, none of them will run until you top up.

7. Driver app & delivery tracking

Beyond planning routes, Énroute can run the actual delivery day end to end — company-issued driver accounts, a native Android app for drivers, persistent live location tracking, proof-of-delivery and return capture, a driver timesheet, and a dispatcher review workflow that closes the loop back to the driver.

Driver accounts

From Settings, add a driver with a name and optional email/phone. This generates a short driver code (e.g. RO-4821) and a 4-digit PIN, shown once — hand these to the driver to log into the app. Deactivate a driver from the same page at any time without deleting their delivery history.

The driver app

Drivers install the Android app once (download link on the Settings page — it's a direct APK install, not a Play Store listing, so "install from unknown sources" needs enabling the first time) and log in with their driver code + PIN, no separate account creation needed. Inside the app:

  • Every screen has a back button and a universal refresh button, and the driver stays logged in — and, once tracking is started, sharing location — until they explicitly stop it or log out, no matter how many times they switch screens, background the app, or it gets swiped from the recent-apps list and reopened.
  • Home — every run assigned to that driver, grouped by trip day, each stop showing its status (Pending / Delivered / Incomplete), ETA and delivery date. A "Start Delivery" toggle begins live location sharing for the shift; each run also has a one-tap "Open in Google Maps" link that automatically drops a stop off the route the moment it's marked delivered, so the map always reflects what's actually left.
  • Delivery capture — tapping a stop opens a form to record a GPS check-in, multiple photos with captions, quantity actually delivered, an invoice number plus invoice photo, and a sales order number that's auto-inferred per store so the driver rarely has to type it. Submitting marks the stop Delivered (or Incomplete if location/photo was denied) immediately, visible to dispatch in real time.
  • Returns — marking a stop as a return opens a dedicated flow: a return-type taxonomy (multiple product options, plus a free-text "other"), quantity with its own unit (kg, tons, litres and more), and its own set of multiple photos with captions, kept entirely separate from delivery photos everywhere they're shown.
  • Timesheet — a calendar screen where the driver marks each day present, absent, or on leave (with a leave type). Every entry is saved immediately and emailed to the company.
  • Analytics — the driver's own stats: completed, incomplete, approved and rejected counts for today, this week, and all-time.
  • Approvals — a read-only view of dispatch's approve/reject decision (and reason, if rejected) on each of the driver's own delivered stops, grouped by truck and day.

Dispatcher-side monitoring & review

The Deliveries dashboard is the company-side view of everything drivers are doing:

  • A live map showing every active driver's current position (updated as they share location), alongside KPI cards for stops delivered, on-time rate, and outstanding approvals.
  • A per-stop table with separate Delivery Photos and Return Photos columns, return type/quantity/unit, quantity delivered, invoice number/photo, and driver name — everything captured in the app, in one place. Dark return/quantity cards use a high-contrast style so the captured text stays readable.
  • A date-range filter — pick a preset window or a custom "from"/"to" range to scope the whole table and its KPIs to exactly the period you need.
  • Approve / Reject controls per delivered stop, with an optional reason on rejection — the decision emails the driver automatically and shows up in their app's Approvals tab.
  • An automatic email to the company on every delivery/return submission and every timesheet entry, so nothing requires you to be watching the dashboard live.
  • A per-driver Today status on the Settings page (No delivery / In progress), and a full Driver Calendar page where you can pick any driver and browse their present/absent/leave history month by month.

Dynamic replanning — changing a route mid-shift

On the Deliveries dashboard, an "Active trips — dynamic replanning" section lists every trip a driver is currently working through (one row per truck/trip that still has at least one pending stop). Two actions are available per trip, and both work entirely off wherever the truck actually is right now, not the original 7am-from-depot plan:

  • Current position is resolved in this priority order: the driver's live GPS ping if they currently have tracking on; otherwise their last confirmed stop's location; otherwise the depot. Both actions below measure everything from whichever of these actually applies.
  • ➕ Add urgent stop — a small form (store/company name, latitude/longitude, tonnage, and optionally operating hours, unloading time, and a restriction) for inserting a new delivery into a truck's in-progress trip. It tries the new stop at every possible position among the trip's still-pending stops and keeps whichever position adds the least extra distance. Two hard checks apply before anything is changed: the new stop's tonnage must fit within what the truck can still carry (checked against the truck's whole-trip capacity, since real trucks load all their cargo at the depot before leaving — not just "capacity left after subtracting delivered stops"), and the insertion must not push the route past the original distance limit measured onward from the truck's current position. If no position satisfies both, the whole action is refused outright — nothing is changed, and you're shown why (e.g. "doesn't fit capacity" or "doesn't fit within the remaining distance limit"), so you can try a different truck instead.
  • ↺ Re-sequence remaining — one click, no form. Reorders whatever's still pending on that trip using the truck's current position as the new starting point, for when a driver has drifted from the original stop order (ran behind, took a different road, handled something out of sequence). Unlike Add urgent stop, this never refuses — these stops are already committed to that truck, so the result always ships; if the new order happens to push a stop outside its delivery time window, that shows up as a normal time-window-violation flag afterward rather than blocking the reorder.
  • Neither action ever touches a stop that's already been marked delivered or incomplete — both only ever add to, or reorder within, the still-pending tail of the trip.
  • Each action costs 1 credit, the same as any other review-tab action, and is recorded with a timestamp in that run's Activity/audit log so you can see exactly what was changed and when.

ℹ The driver app and delivery dashboard work off the same run data your optimize plan already produced — no separate setup or re-upload needed once a run's driver plans have been emailed out.

8. Run templates

On the upload form, save your current country, origin, max distance, distance mode and other settings as a named template so you don't have to re-type them for a depot or route you run regularly. Templates store settings only — you still upload a fresh CSV pair each run. Load, or delete, a saved template from the dropdown at the top of the upload form.

9. History

Every run you submit is saved to your account — runs are private per account, no other user can see or load them. The History page lists your recent runs and lets you look up older ones by date; click any run to reopen its full dashboard.

10. Analytics & usage

  • Runs, stops and distance trended over time so you can see your fleet's usage pattern, not just a single run's numbers.
  • On-time %, stops-assigned % and total violation/unassigned counts, so you can track plan quality run over run.
  • An estimated cost & emissions panel — set your own ₹/km, ₹/litre fuel and kg CO₂/litre rates (saved in your browser) to see approximate delivery cost and emissions for the period.
  • An alerts-per-day chart plotting violations and unassigned stops together, so a bad batch of data stands out immediately.

11. AI chat assistant

After a run completes, accounts that have purchased more than 10 credits in total get a floating chat assistant that can answer questions about that specific run's results (e.g. "which stops are still unassigned?" or "what's the total tonnage on truck VDF7672?"). It's unlocked automatically once your lifetime purchases pass that threshold — no separate signup needed.

12. Output CSV columns

The downloadable results CSV (from the Map view or the Review tab's "Download approved CSV") includes, for every stop: cluster/truck assignment, stop sequence number within its route, tonnage carried, estimated arrival time, estimated fuel/distance, whether it violated its delivery window, and its final status (assigned / unassigned / excluded).

ℹ All of your original input columns are preserved alongside the computed ones, so the output can be matched straight back to your source system.

13. Email notifications

You'll get an email at the address you signed up with when a run finishes, and another if a run brings your credit balance down to zero. Notifications go to your account's primary email — no separate setup required.

14. API access

Run optimizations programmatically instead of through the upload form — send CSV files or plain JSON row objects, connect Power BI or Tableau, or let an AI agent (Claude, Cursor, or any MCP-compatible tool) call it directly. Generate a key from the Analytics page. API runs draw from the exact same pay-as-you-go credit balance as the app: 1 optimization = 1 credit, whether it came from the UI, the REST API, or an agent over MCP — you're blocked the same way once you're out.

Authorization: Bearer rok_live_xxxxxxxxxxxxxxxxxxxxxxxx
POST https://routeoptimizerglobal.theagenticuniverse.com/api/v1/optimize

Full reference — request/response shapes, cURL/Python/Node examples, the Power BI Power Query recipe, Tableau connection options, and MCP setup for AI agents — lives on the API Documentation page.