Inspiration
Contractors submit thousands of gas-meter corrosion inspections every week, each with a form and photos. A form can look complete even when the visit didn't happen, or when its photo came from a different meter. QA supervisors can only check a handful, and sending a crew back out (a "truck roll") is expensive. There are no confirmed fraud labels in the data, so we asked a practical question instead: which 20 inspections should a supervisor check this week, why, and what's the cheapest way to settle each one?
What it does
ProofTrail checks every inspection against three independent witnesses:
- A. Location: was the worker's survey point near the meter?
- B. Photo: was the attached photo taken at this visit, or is it a copy from somewhere else?
- C. Company records: does the typed reading and radio module (ERT) match the meter that's actually there?
It only escalates when independent sources agree, and every case shows:
- What supports the visit, not just what raises doubt
- What could innocently explain it: meter banks, GPS error, map errors, recent meter exchanges
- A problem type routed to the cheapest correct action:
- worker was there but the photo is wrong → ask the contractor for the original (an email, not a truck roll)
- map is wrong → map correction
- nothing supports the visit → desk check
- A resolution test: the one check that would clear or escalate the case
- Directional flagging: when a photo was reused, it flags the copy, not the honest original
Supervisors work through a ranked review queue, record decisions with notes, and export handoffs for contractors and the GIS team.
Results (one-week anonymized sample, Mar 2–8, 2026)
- 39,631 inspections and 111,911 photo records processed
- 45 High-priority cases, about one week's review budget
- 156 inspections where 2+ independent sources contradict the form and nothing supports the visit
- 72 of 72 reused cross-site photo files came from the phone gallery, so requiring in-app capture would close that gap
- Blinded review: reviewers judged 15 of 20 ProofTrail cases worth follow-up vs. 7 of 20 from a simple duplicate-photo check. (A pilot: 40 shuffled inspections, two team reviewers, source hidden.)
- A full week processes in ~22 seconds on a laptop, at $0, with no AI model.
How we built it
- Data pipeline: Python 3.12 and pandas join inspections to photo metadata, run 8 deterministic checks across the three witnesses, compute visit support, innocent explanations, priority bands, problem types and resolution tests, and export typed JSON.
- Web app: React, TypeScript, Vite, Tailwind CSS and shadcn/ui, with an anonymized-grid map (SVG + d3-scale), a timeline, and decisions stored locally.
- Verification: a script independently re-derives every number we quote from the raw CSVs, plus a pytest suite (pipeline, data contract, evaluation) and frontend tests.
Challenges we ran into
- No ground truth. Without fraud labels we couldn't honestly report "accuracy", so we measured review yield with a blinded comparison instead.
- Single signals are noisy. GPS drifts, maps go stale, readings get mistyped. Our first rules flagged 607 High cases; requiring independent witnesses to agree brought it to 45.
- Telling honest reuse from copying. One photo on five inspections looked suspicious until we saw the five meters sat within 1.4 m of each other, a meter bank. So we built rule-outs that let ProofTrail clear its own flags.
- Messy time data: minute-rounded inspection times, phone clocks, and a mysterious file-name timestamp offset we chose not to use in any rule.
Accomplishments we're proud of
- A tool that argues against its own flags and shows evidence on both sides
- Every number on screen traces back to a source field
- Routing that saves expensive field visits for the cases that actually need them
What we learned
- In compliance work, being explainable and honest matters more than a clever score.
- The most useful output isn't "suspicious", it's "here's the one check that settles it".
- Measure what you can defend. Review yield beats an invented accuracy number.
What's next
- A pilot alongside CenterPoint's current QA process, measuring follow-up rate, truck rolls replaced and review time
- A nightly batch on live data, with a running photo-fingerprint index to catch reuse across weeks
- Reviewer decisions become the labels the data is missing today, enabling a per-rule scorecard and, eventually, a learned ranking
Responsible data use
Built on anonymized challenge data that stays local and is never committed. Locations are a shifted grid in meters, not real coordinates. ProofTrail flags records, not people, never labels anything fraud, and a human decides every case. It's a hackathon prototype, not affiliated with CenterPoint Energy.