3.9 KiB
Esper PoC: Tachograph Driver-Card Activity Evaluation
This PoC intentionally uses only existing imported EventHub source events:
- provider:
TACHOGRAPH - source kind:
DRIVER_CARD - extraction code:
CARD_ACTIVITY - event domain:
DRIVER_ACTIVITY - event types:
DRIVE,WORK,AVAILABILITY,BREAK_REST - lifecycles:
START,END
It does not introduce canonical-event tables yet. The goal is to prove that Esper can replay one driver and one selected period and produce activity-level and operating-period results.
Endpoint
GET /api/eventhub/esper-poc/tachograph/driver-card-activities
Query parameters:
| Parameter | Required | Example | Meaning |
|---|---|---|---|
tenantKey |
yes | default |
EventHub tenant key. |
driverEntityId |
yes | UUID | Existing eventhub.event.driver_entity_id. |
occurredFrom |
yes | 2026-04-01T00:00:00Z |
Requested period start. |
occurredTo |
yes | 2026-05-01T00:00:00Z |
Requested period end. |
guardHours |
no | 24 |
Extra loading window before/after requested period. Needed for activities crossing midnight/month boundaries and long rests crossing period boundaries. |
significantDrivingMinutes |
no | 3 |
DRIVE intervals longer than this threshold count as significant driving periods. |
mergeGapSeconds |
no | 60 |
Consecutive identical activities are merged if the gap is at most this value. |
operatingPeriodSplitRestHours |
no | 7 |
A BREAK_REST activity longer than this threshold splits operating time periods. |
Produced levels
Level 1: Raw
raw contains the original point events from eventhub.event.
Level 2: Activities
Esper consumes the raw point events and produces intervals by pairing:
START + END with same sourceRowId, activity type, driver and card slot
The service merges consecutive identical activities in the full guard window first, then clips the merged activities to the requested period. This is important because a long BREAK_REST crossing the requested boundary must keep its full guard-window duration for operating-period splitting.
Operating time periods
operatingTimePeriods are derived from the merged activity timeline.
A BREAK_REST interval splits operating periods when:
activityType = BREAK_REST
and duration > operatingPeriodSplitRestHours
The default is 7 hours. With the default, a BREAK_REST of exactly 7 hours does not split; it must be longer than 7 hours.
Each operating period contains:
sequenceNumberstartedAtendedAtdurationSecondsactivitiesworkingOperationTimesdrivingTimeInterruptionEvaluation- optional references to the long rest before/after the period
Departure and arrival are evaluated per operating period:
- departure = first significant
DRIVEinterval inside that operating period - arrival = end of the last significant
DRIVEinterval inside that operating period - middle/interruption = gaps between significant
DRIVEintervals inside the same operating period
Result semantics
workResultPerDriverandworkingOperationTimesPerEmployeecurrently use the same PoC summary for the whole requested period.workingSeconds = DRIVE + WORK.operationSeconds = DRIVE + WORK + AVAILABILITY.breakRestSecondsis reported separately.- Top-level
drivingTimeInterruptionEvaluationevaluates the whole requested period. - Each item in
operatingTimePeriodshas its owndrivingTimeInterruptionEvaluation.
Current limitations
- Uses the existing source-level
driver_entity_id, not a canonical employee table. - Reads only tachograph driver-card activity events.
- Does not merge VU/card duplication.
- Does not persist results; the endpoint returns a PoC calculation response.
- Esper is used for interval creation. Summary, clipping, operating-period split, and merged activity report calculation are implemented in Java for auditability and easier future migration to canonical events.