How a mileage claim arrives
The last system had three ways in. This one has exactly one, and the reason is worth stating plainly: mileage is claimed by people standing next to a van at six in the evening. Anything that needs a laptop will be done at month end from memory, and a claim from memory is a guess. So the entire intake design is in service of one number: how many seconds it takes to file a claim on a phone.
Key takeaways
- One lane: a web form on a home-screen link. No app, no store, no login screen.
- Three taps, because the recent-sites list covers most trips and the date defaults to today.
- Site names resolve against the customer list before any routing call is made.
- An address that cannot be resolved is a question, not a rejection.
- A fingerprint on claimant, date and both endpoints makes a resubmission safe.
One lane, on purpose
Every extra channel is another shape to parse and another way for the same trip to be claimed twice. Mileage does not need an email lane: nobody writes prose about a journey. It needs the shortest possible path from standing beside a van to a submitted claim.
- Database
- Machine learning
- Analytics
- Front-end & mobile
Why the recent list matters more than it looks
Field staff visit the same places. A plumber’s ten most recent destinations cover perhaps seventy per cent of next week’s trips, and a maintenance engineer on a contract round is closer to ninety. So the form opens with those ten as buttons, sorted by how recently they were used, and the common case is: tap yesterday’s site, tap today’s, tap submit.
That is not a nicety. A claim filed the same evening is a claim filed from the odometer and the day, which is accurate. A claim filed on the 31st for the whole month is filed from a diary and a memory, which is not. Most of what a mileage checker catches is not dishonesty; it is the accumulated drift of people reconstructing four weeks of driving on a Sunday night.
Turning a place into an address
The routing service needs something routable. People type “Henderson”, “the Henderson site”, “Henderson Ltd, unit 4”, and occasionally just “job 4471”. Resolution runs in a fixed order, and it stops at the first confident answer.
- Database
- App integration
- Security & identity
- Analytics
- Front-end & mobile
- People
- Outside AWS
Why the routing lookup is last
It is the only line on the bill that is charged by a third party, and it is the only step that can be skipped entirely. The distance between two fixed postcodes is a constant, so the first time anyone claims Ashford to Maidstone it costs one lookup, and every claim for that pair afterwards costs nothing forever. On a business with a regular round, the cache hit rate settles above ninety per cent within a month.
Putting the duplicate test first has the same shape of benefit. A claimant who taps submit twice on a bad signal generates two requests, and the second must not pay for a routing lookup, let alone create a second claim.
What the resolver refuses to guess
- Two candidates is not a match. If “Henderson” matches both Henderson Plant and Henderson Motors, the claimant gets both as buttons. Picking the wrong one produces a wrong distance, which produces a wrong question, which wastes everybody’s time.
- A postcode from a job number is fine. If the reason field contains a job reference and that job has a site address, that is a confident match, and it is the one case where the system fills something in that the claimant did not type.
- A home address is never inferred. Home-to-first-site is a policy question with tax consequences, and the sheet decides whether it counts. The system never quietly adds or removes it.
- A place that resolves to nothing stays as typed. The claim is still made, still recorded, and simply goes to a person — because a claim that cannot be auto-checked is not a suspicious claim, it is an unusual address.
Next: the three comparisons the checker actually makes, and why the third one never blocks a payment on its own.
All posts