A fleet vehicle can generate several versions of the same working period. The ignition system records when the engine starts, GPS tracking identifies movement, and drivers may manually enter duty or trip details. If a backend treats every record as a separate activity, the result is inflated driving time, incorrect utilisation reports, and unreliable driver-hour calculations.
The challenge is not collecting more data. It is deciding which events describe the same activity, which source should be trusted, and how corrections should affect previously calculated totals.
A reliable fleet management backend needs a unified event model that can reconcile ignition, GPS, and manual logs without counting the same period twice.
Why Driver Hours Become Inaccurate
Consider a vehicle that starts at 8:00 AM, begins moving at 8:07 AM, stops at 9:15 AM, and switches off at 9:20 AM.
Three systems may produce different records:
- Ignition: Engine on at 8:00 AM and off at 9:20 AM.
- GPS: Movement detected from 8:07 AM to 9:15 AM.
- Driver app: Trip manually recorded from 8:05 AM to 9:18 AM.
These are not necessarily three separate activities. They are three observations of one operational period.
A poorly designed backend might add all three durations together. A slightly better system might select one source and ignore the others, losing useful information.
The right approach is to preserve each source event while calculating a single reconciled activity timeline.
1. Store Raw Events Before Calculating Driver Hours
Do not directly update a driver's total hours whenever a new GPS or ignition event arrives.
Instead, create an immutable event record that captures the original information.
A practical event structure could contain:
| Field | Purpose |
|---|---|
| event_id | Unique event identifier |
| vehicle_id | Vehicle associated with the event |
| driver_id | Assigned or identified driver |
| source | Ignition, GPS, or manual |
| event_type | Start, stop, movement, correction |
| event_time | Time reported by the source |
| received_at | Time received by the backend |
| timezone | Original timezone or offset |
| metadata | Source-specific information |
The distinction between event_time and received_at is important.
A telematics device may send an event several minutes late because of poor connectivity. If the backend uses only the time it received the event, the calculated trip timeline may be wrong.
Store both timestamps and use the event's actual occurrence time for timeline reconstruction.
2. Assign Source Reliability by Event Type
Not every data source is equally reliable for every measurement.
Ignition data is useful for determining when an engine was switched on or off. GPS is useful for identifying movement and location changes. Manual logs can provide driver context, corrections, and operational details that devices cannot capture.
A fleet backend should therefore use event-specific source priorities rather than one universal source hierarchy.
For example:
| Measurement | Primary evidence | Supporting evidence |
|---|---|---|
| Engine state | Ignition signal | Telematics status |
| Vehicle movement | GPS and speed data | Odometer changes |
| Driver identity | Authenticated driver session | Assignment records |
| Duty declaration | Driver-entered record | Fleet supervisor approval |
| Trip boundaries | Combined event timeline | Manual correction |
This does not mean a GPS record should always override a manual entry. A driver may have a legitimate reason to correct a missing or incorrectly recorded event.
The system should preserve the original observation, the correction, and the person or process responsible for approving it.
3. Build a Unified Activity Timeline
Once raw events are stored, the backend can group related events into operational sessions.
A session might begin when ignition is detected or when a valid manual trip start is submitted. GPS movement can confirm that the vehicle has started travelling.
The backend should use a configurable time window to associate events that are likely to belong to the same activity.
For example:
08:00 - Ignition ON
08:05 - Manual trip started
08:07 - GPS movement detected
09:15 - GPS movement stopped
09:20 - Ignition OFF
09:22 - Manual trip completed
The reconciled activity should be one session, not three separate sessions.
A simplified session record could look like this:
{
"vehicle_id": "VH-204",
"driver_id": "DR-118",
"session_start": "08:00:00",
"session_end": "09:20:00",
"movement_start": "08:07:00",
"movement_end": "09:15:00",
"sources": [
"ignition",
"gps",
"manual"
],
"reconciliation_status": "matched"
}
The important distinction is between engine-on duration, movement duration, and declared working duration. They should remain separate measurements.
4. Prevent Duplicate Events with Idempotency
Telematics devices frequently retry requests when they do not receive an acknowledgement. Mobile applications can also resend events after reconnecting.
Without duplicate protection, the same ignition or GPS event may be processed more than once.
Use an idempotency strategy based on a stable event identifier.
If the source provides a unique event ID, use it. Otherwise, generate a deterministic key from suitable attributes such as:
- Vehicle identifier
- Source identifier
- Event type
- Event timestamp
- Device sequence number
A database constraint can prevent duplicate insertion:
CREATE UNIQUE INDEX unique_vehicle_source_event
ON fleet_events (
vehicle_id,
source,
source_event_id
);
For systems where the source does not provide a stable ID, use a carefully designed deduplication key. Avoid relying only on timestamps because two legitimate events may occur within the same second.
5. Handle Late and Out-of-Order Events
A GPS device may upload stored data after returning to network coverage. A manual correction may also arrive after a supervisor reviews the trip.
The backend should not assume that events arrive in chronological order.
A better processing model includes:
- Save the incoming event.
- Validate its source, vehicle, and timestamp.
- Identify the affected activity window.
- Recalculate that window.
- Update derived session records.
- Preserve the previous calculation for audit purposes.
This approach is safer than permanently adding each event to a driver's daily total.
For example, if an ignition-off event arrives after a GPS trip has already been closed, the backend can revise the engine-on duration without creating a second trip.
6. Keep Corrections Separate from Original Events
Manual logs are particularly important when a device stops reporting.
However, allowing drivers or supervisors to overwrite raw telematics records creates audit problems.
Use a correction table or adjustment record instead.
A correction should include:
- Original event or session reference
- Corrected value
- Reason for the correction
- Submitted by
- Approved by, where required
- Submission and approval timestamps
The system can then show both the original device record and the approved correction.
This makes driver-hour calculations easier to investigate when payroll, operations, or compliance teams question a reported total.
7. Separate Driving Time from Engine and Duty Time
A fleet application should not treat engine-on time as equivalent to driving time.
A vehicle may remain switched on while parked. A driver may also perform loading, inspection, waiting, or other duties while the vehicle is stationary.
A useful reporting model separates:
- Engine-on duration
- Vehicle movement duration
- Declared duty duration
- Idle duration
- Rest or off-duty periods, where applicable
Regulatory driving and working-time definitions vary by jurisdiction. A custom fleet application should apply the relevant rules for the operating region rather than assuming that a single calculation works everywhere.
8. Monitor Reconciliation Quality
A fleet manager should be able to see whether the system is reconciling records successfully.
Useful monitoring metrics include:
- Percentage of GPS events matched to ignition sessions
- Number of duplicate events rejected
- Late-event frequency
- Manual correction frequency
- Unmatched trip records
- Sessions with conflicting driver assignments
These indicators help identify device failures, driver-app issues, and weaknesses in the data pipeline.
When Custom Fleet Software Development Helps
A standard telematics dashboard may display vehicle activity, but businesses with multiple device providers, driver applications, and operational systems often need more control over event reconciliation.
Custom fleet software development can bring these sources into one backend, apply consistent business rules, and expose reconciled data to dispatch, payroll, maintenance, and reporting systems.
Dev Technosys can be considered among the companies for fleet management app development, telematics integrations, driver-facing mobile apps, and backend workflows. Its development approach can be relevant when a fleet operator needs application logic designed around its existing devices and operating processes.
Final Thoughts
Accurate driver-hour tracking depends on more than collecting ignition and GPS signals. It requires a backend that understands how different observations relate to the same operational activity.
By preserving raw events, applying source-specific rules, preventing duplicate processing, and maintaining an auditable correction history, fleet operators can build more dependable driver-hour reports.
The objective is simple: one operational activity should produce one reconciled record, even when several systems report it.
Top comments (0)