tracksolid_timescale_grafan.../**260410_baseline_report.md

510 lines
24 KiB
Markdown
Raw Normal View History

# Fireside Communications — Fleet Baseline Report
**Date:** 2026-04-11 · **Time of queries:** ~07:38 EAT
**Database:** tracksolid_db on TimescaleDB
**Container:** timescale_db-bo3nov2ija7g8wn9b1g2paxs-204435447351
**Report scope:** All 63 registered devices · All tables · Post-migration 04 + 05
---
## 1. Migration Status
All four schema migrations applied and tracked:
| Migration File | Applied (EAT) | Status |
|---|---|---|
| `02_tracksolid_full_schema_rev.sql` | 2026-04-10 23:45:17 | ✓ Applied |
| `03_webhook_schema_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied |
| `04_bug_fix_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied — `distance_km` renamed & corrected |
| `05_enhancement_migration.sql` | 2026-04-10 23:45:17 | ✓ Applied — new tables + columns |
Schema is fully current. No pending migrations.
---
## 2. Table Row Counts (as of 07:38 EAT)
| Table | Rows | Notes |
|---|---|---|
| `tracksolid.devices` | **63** | Full fleet registry |
| `tracksolid.live_positions` | **19** | 19 devices with a known position (30% of fleet) |
| `tracksolid.position_history` | **137** | All historical GPS fixes — growing |
| `tracksolid.alarms` | **2** | 2 vibration alerts overnight |
| `tracksolid.trips` | **0** | Fleet parked overnight — expected |
| `tracksolid.parking_events` | **0** | Fix deployed; will populate with movement |
| `tracksolid.obd_readings` | **0** | Awaiting webhook registration |
| `tracksolid.device_events` | **0** | Awaiting `/pushevent` registration |
| `tracksolid.fuel_readings` | **0** | Awaiting `/pushoil` registration |
| `tracksolid.temperature_readings` | **0** | Awaiting `/pushtem` registration |
| `tracksolid.lbs_readings` | **0** | Awaiting `/pushlbs` registration |
| `tracksolid.geofences` | **0** | Not yet configured |
| `tracksolid.heartbeats` | **0** | Awaiting heartbeat webhook |
| `tracksolid.fault_codes` | **0** | Awaiting fault code data |
| `tracksolid.ingestion_log` | **397** | Polling audit trail — healthy |
| `dwh_gold.fact_daily_fleet_metrics` | **0** | ETL not yet run |
| `dwh_gold.dim_vehicles` | **0** | Awaiting population |
---
## 3. Fleet Composition
**63 devices across 4 device models:**
| Model | Count | Typical Use |
|---|---|---|
| AT4 | 23 | Asset / cargo hardwired tracker |
| JC400P | 23 | Camera-capable tracker (larger vehicles) |
| X3 | 10 | Compact vehicle tracker |
| GT06E | 7 | OBD-port tracker |
| **Total** | **63** | |
---
## 4. Full Device Registry
> All 63 devices. `vehicle_number` and `driver_name` are blank for every device — primary data quality gap.
| Device Name | Model | SIM | Odometer (km) | Expires | Status |
|---|---|---|---|---|---|
| AT4-51820 | AT4 | — | — | — | No position |
| AT4-53099 | AT4 | — | — | — | No position |
| AT4-54246 | AT4 | — | — | — | No position |
| AT4-55029 | AT4 | — | — | — | No position |
| AT4-55235 | AT4 | — | — | — | No position |
| AT4-57389 | AT4 | — | — | — | No position |
| AT4-61860 | AT4 | — | — | — | No position |
| AT4-64815 | AT4 | — | — | 2036-02-05 | Stale (1,556h) |
| AT4-64823 | AT4 | — | — | — | No position |
| AT4-64880 | AT4 | — | — | — | No position |
| AT4-64989 | AT4 | — | — | — | No position |
| AT4-65010 | AT4 | — | — | — | No position |
| AT4-65135 | AT4 | — | — | — | No position |
| AT4-65341 | AT4 | — | — | — | No position |
| AT4-65598 | AT4 | — | — | — | No position |
| AT4-65648 | AT4 | — | — | — | No position |
| AT4-66158 | AT4 | — | — | — | No position |
| AT4-67271 | AT4 | — | — | — | No position |
| AT4-67693 | AT4 | — | — | — | No position |
| Belta KCU-647D | GT06E | 0110094465 | **234,546** | 2040-04-03 | Stale (7,568h) — SERVICE FLAG |
| FRED KMGW 538W HULETI | X3 | 0119867174 | 2,284 | 2036-02-08 | **Active (0.1h)** |
| GT06E-85428 | GT06E | — | — | — | No position |
| GT06E-86319 | GT06E | — | — | — | No position |
| JC400P-07904 | JC400P | — | — | — | No position |
| JC400P-85041 | JC400P | — | — | — | No position |
| JC400P-85058 | JC400P | — | — | — | No position |
| JC400P-85751 | JC400P | — | 17 | 2036-03-11 | Stale (729h) |
| JC400P-86270 | JC400P | — | 6,931 | — | No position |
| JC400P-86403 | JC400P | — | — | — | No position |
| JC400P-87625 | JC400P | — | — | — | No position |
| JC400P-87831 | JC400P | — | — | — | No position |
| JC400P-89431 | JC400P | — | 7,375 | — | No position |
| JC400P-89530 | JC400P | — | — | — | No position |
| JC400P-89563 | JC400P | — | — | — | No position |
| JC400P-89662 | JC400P | — | — | — | No position |
| JC400P-89977 | JC400P | — | — | — | No position |
| JC400P-90108 | JC400P | — | — | — | No position |
| JC400P-90199 | JC400P | — | — | — | No position |
| JC400P-90678 | JC400P | — | — | — | No position |
| JC400P-91619 | JC400P | — | 3,719 | — | No position |
| JC400P-92278 | JC400P | — | — | — | No position |
| JC400P-92716 | JC400P | — | — | — | No position |
| JC400P-92732 | JC400P | — | — | — | No position |
| JC400P-94233 | JC400P | — | — | — | No position |
| JK Subaru KCS 903Y | GT06E | 0746759925 | 73,345 | 2039-06-12 | Stale (671h) |
| KCE 690F | AT4 | — | — | 2039-07-01 | Very stale (57,312h) |
| KCS 903Y JK SUB | AT4 | 0700024569 | 4,492 | 2039-06-09 | Very stale (15,213h) |
| KCU 145Q Solo Xtrail | GT06E | 0757270810 | 53,228 | 2039-12-20 | Stale (7,530h) |
| KCU 865Q Vanguard | GT06E | 0757270763 | 61,758 | 2039-12-20 | Stale (62h) |
| KCU 865Q Vanguard Sub | AT4 | 0757270804 | 9,656 | 2039-12-20 | Very stale (15,429h) |
| KDK 829A GP | GT06E | 0707923872 | **239,264** | 2042-10-29 | **Active (0.2h)** — SERVICE FLAG |
| KDU 878T_CAM | JC400P | 0708351897 | 1,562 | 2035-08-18 | Stale (3,064h) |
| KDU 878T_Track | X3 | 0708352823 | 4,802 | 2035-08-18 | Stale (62h) |
| KDW 632M HL Cam | JC400P | 300002396032 IoT | 16 | 2036-03-11 | Stale (740h) |
| KDW 632M HL Tracker | X3 | 300002396033 IoT | 222 | 2036-02-09 | Stale (728h) |
| KMEH 692C KAWASAKI | AT4 | 0110094467 | 3,319 | 2040-04-03 | Very stale (24,693h) |
| KMGR 409U HENRY JAZZ | X3 | 0768697302 | 6,696 | 2035-07-31 | Semi-active (16h) |
| X3-59405 | X3 | — | — | — | No position |
| X3-63282 | X3 | — | 4,194 | 2036-02-14 | **Active (0.2h) — UGANDA ANOMALY** |
| X3-64223 | X3 | — | — | — | No position |
| X3-68968 | X3 | — | 16 | 2036-03-11 | Stale (728h) |
| X3-69172 | X3 | — | — | — | No position |
| X3-78553 | X3 | — | — | — | No position |
---
## 5. Live Position Coverage
**19 of 63 devices (30%)** have a position in `live_positions`.
**44 devices (70%)** have no position at all — offline, SIM not installed, or never activated.
### Freshness Bands
| Band | Count | Devices |
|---|---|---|
| < 1 hour (active now) | 3 | FRED KMGW 538W HULETI, X3-63282, KDK 829A GP |
| 124 hours | 1 | KMGR 409U HENRY JAZZ (16h) |
| 17 days (stale) | 3 | KCU 865Q Vanguard (62h), KDU 878T_Track (62h), KDU 878T_CAM (3,064h) |
| 112 months (very stale) | 6 | JK Subaru KCS 903Y, KCU 145Q, Belta KCU-647D, etc. |
| > 1 year (historical only) | 6 | KCS 903Y JK SUB, KCU 865Q Vanguard Sub, KMEH 692C KAWASAKI, KCE 690F, etc. |
### Full Live Position Detail
| Device | Model | Lat | Lng | Speed (km/h) | ACC | GPS Signal | Satellites | Last Fix (EAT) |
|---|---|---|---|---|---|---|---|---|
| FRED KMGW 538W HULETI | X3 | -1.23748 | 36.72662 | 0 | Off | 4 | 15 | 2026-04-11 07:34:26 |
| X3-63282 | X3 | 0.19554 | 32.54002 | 0 | Off | 4 | 11 | 2026-04-11 07:30:15 |
| KDK 829A GP | GT06E | -1.32787 | 36.89972 | 0 | Off | 3 | 8 | 2026-04-11 07:28:58 |
| KMGR 409U HENRY JAZZ | X3 | -1.23748 | 36.72674 | 1 | Off | 2 | 6 | 2026-04-10 15:40:32 |
| KCU 865Q Vanguard | GT06E | -1.23748 | 36.72641 | 5 | Off | — | — | 2026-04-08 17:17:45 |
| KDU 878T_Track | X3 | -1.23528 | 36.72871 | 0 | Off | — | — | 2026-04-08 17:16:55 |
| JK Subaru KCS 903Y | GT06E | -1.23558 | 36.72870 | 0 | Off | — | — | 2026-03-14 09:08:34 |
| X3-68968 | X3 | -1.23799 | 36.72615 | 0 | Off | — | — | 2026-03-11 23:59:28 |
| KDW 632M HL Tracker | X3 | -1.24087 | 36.72839 | 0 | Off | — | — | 2026-03-11 23:53:44 |
| JC400P-85751 | JC400P | -1.23796 | 36.72611 | 0 | Off | — | — | 2026-03-11 22:15:44 |
| KDW 632M HL Cam | JC400P | -1.24115 | 36.72847 | 0 | Off | — | — | 2026-03-11 11:52:01 |
| AT4-64815 | AT4 | -1.24136 | 36.72872 | 0 | Off | — | — | 2026-02-05 11:19:55 |
| KDU 878T_CAM | JC400P | -1.06900 | 37.01436 | 12 | Off | — | — | 2025-12-04 15:27:42 |
| KCU 145Q Solo Xtrail | GT06E | -1.29728 | 36.88850 | 0 | Off | — | — | 2025-06-01 14:04:47 |
| Belta KCU-647D | GT06E | -1.15151 | 36.63857 | 0 | Off | — | — | 2025-05-30 23:53:22 |
| KCS 903Y JK SUB | AT4 | -1.23529 | 36.72875 | 0 | Off | — | — | 2024-07-16 10:41:42 |
| KCU 865Q Vanguard Sub | AT4 | -1.23522 | 36.73104 | 0 | Off | — | — | 2024-07-07 10:43:21 |
| KMEH 692C KAWASAKI | AT4 | -1.23849 | 36.72460 | 0 | Off | — | — | 2023-06-17 10:41:18 |
| KCE 690F | AT4 | -1.24008 | 36.74522 | 31 | Off | — | — | 2019-09-27 07:20:08 |
> **ACC Off for all 19 devices** — fleet parked overnight, consistent with ~03:0007:38 EAT query window.
---
## 6. Geographic Clustering
All known positions confirmed in two clusters plus one critical outlier:
| Cluster | Area | Coords | Active Devices |
|---|---|---|---|
| **Primary depot** | Nairobi West / Kikuyu Rd corridor | -1.235 to -1.241, 36.724 to 36.731 | 14 devices |
| **Secondary** | Nairobi East / Thika Rd | -1.297 to -1.328, 36.885 to 36.900 | 2 devices |
| **Outlier** | Thika / Ruiru | -1.069, 37.014 | 1 device (KDU 878T_CAM) |
| **CRITICAL** | **Uganda — Kampala region** | **0.196, 32.540** | **1 device (X3-63282)** |
> The primary depot cluster at ~(-1.237, 36.727) is very tight — 10+ devices within a 200m radius — suggesting a single compound/yard. This is your main base.
---
## 7. Position History
**Total fixes: 137** across two ingestion sources:
| Source | Fixes | Method | Frequency |
|---|---|---|---|
| `poll` | 124 | Fleet-wide 60s sweep | Every 60 seconds |
| `track_list` | 13 | Per-device high-res trail (POLL-01) | Every 30 minutes |
| **Total** | **137** | | |
### Per-Device Fixes — Last 24 Hours
| Device | Model | Fixes | First Fix (EAT) | Last Fix (EAT) | Avg Speed | Max Speed |
|---|---|---|---|---|---|---|
| FRED KMGW 538W HULETI | X3 | 40 | 2026-04-10 23:16 | 2026-04-11 07:34 | 0.0 km/h | 0.0 |
| X3-63282 | X3 | 29 | 2026-04-10 23:15 | 2026-04-11 07:30 | 0.0 km/h | 0.0 |
| KDK 829A GP | GT06E | 16 | 2026-04-10 23:13 | 2026-04-11 07:29 | 0.0 km/h | 0.0 |
| KMGR 409U HENRY JAZZ | X3 | 1 | 2026-04-10 15:40 | 2026-04-10 15:40 | 1.0 km/h | 1.0 |
**Only 4 of 63 devices generated position history in the last 24 hours.** The remaining 59 are either offline, not reporting, or have stale last-seen data from prior months.
### Track List Sample (POLL-01 High-Resolution Trail)
13 high-res waypoints captured across 15 scheduler runs (30-min interval, overnight):
| Device | GPS Time (EAT) | Lat | Lng | Speed |
|---|---|---|---|---|
| FRED KMGW 538W HULETI | 2026-04-11 07:04:07 | -1.23748 | 36.72662 | 0 |
| KDK 829A GP | 2026-04-11 07:00:52 | -1.32800 | 36.89976 | 0 |
| X3-63282 | 2026-04-11 07:00:15 | 0.19554 | 32.54002 | 0 |
| FRED KMGW 538W HULETI | 2026-04-11 06:54:01 | -1.23748 | 36.72662 | 0 |
| X3-63282 | 2026-04-11 06:45:15 | 0.19554 | 32.54002 | 0 |
All track_list fixes show speed = 0 and stationary coordinates, confirming overnight parking. Altitude data not yet populated (device-dependent feature).
---
## 8. Alarms
**Total alarms: 2** — both on the same device, overnight.
| # | Device | Alarm Type | Alarm Name | Time (EAT) | Lat | Lng | Speed |
|---|---|---|---|---|---|---|---|
| 1 | FRED KMGW 538W HULETI | 3 | Vibration alert | 2026-04-11 00:57:30 | -1.23752 | 36.72660 | 0 |
| 2 | FRED KMGW 538W HULETI | 3 | Vibration alert | 2026-04-11 02:58:36 | -1.23748 | 36.72660 | 0 |
**Key findings:**
- **BUG-01 confirmed fixed** — `alarm_type` (3) and `alarm_name` ("Vibration alert") now correctly populated from polling. Previously both were always NULL.
- Both events at stationary coordinates, ~2 hours apart while parked.
- Vibration type 3 while speed = 0 suggests: tamper attempt, animal contact, or sensor vibration from nearby traffic.
- Vehicle position is at the primary Kikuyu Rd depot cluster — consistent with a parked asset.
- No speed alarms, no geofence alarms, no power alarms.
---
## 9. Trips
**Trips recorded: 0**
Expected — all vehicles parked overnight. Schema confirmed correct:
| Column | Present | Notes |
|---|---|---|
| `distance_km` | ✓ | Renamed from `distance_m`, values corrected ÷1,000,000 (BUG-02 fixed) |
| `max_speed_kmh` | ✓ | Will populate from next trip poll (BUG-03 fixed) |
| `avg_speed_kmh` | ✓ | |
| `driving_time_s` | ✓ | |
| `idle_time_s` | ✓ | |
| `fuel_consumed_l` | ✓ | |
First trips expected ~06:3007:00 EAT when drivers depart. Validate with:
```sql
SELECT d.device_name, t.start_time AT TIME ZONE 'Africa/Nairobi',
t.distance_km, t.avg_speed_kmh, t.max_speed_kmh, t.driving_time_s
FROM tracksolid.trips t
JOIN tracksolid.devices d ON d.imei = t.imei
ORDER BY t.start_time DESC LIMIT 10;
```
---
## 10. Parking Events
**Parking events: 0**
POLL-02 fix deployed (`acc_type=0`, corrected `durSecond` field mapping). The API is responding (60 calls, 0 rows) — events will populate once vehicles complete a full park-stop-move cycle.
---
## 11. Ingestion Pipeline Health
Total API calls across all endpoints since deployment (~08h operational):
| Endpoint | Calls | Rows Upserted | Rows Inserted | Avg Duration | Failures | First Call (EAT) | Last Call (EAT) |
|---|---|---|---|---|---|---|---|
| `jimi.user.device.location.list` | 311 | 5,909 | 5,909 | 493ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:38 |
| `jimi.open.platform.report.parking` | 60 | 0 | 0 | 10,891ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:36 |
| `jimi.device.track.list` | 15 | 0 | 80 | 136,875ms | 0 | 2026-04-10 23:45 | 2026-04-11 07:19 |
| `jimi.device.alarm.list` | 11 | 0 | 11 | 939ms | 0 | 2026-04-11 01:00 | 2026-04-11 03:24 |
| `jimi.user.device.list+detail` | 2 | 126 | 0 | 6,290ms | 0 | 2026-04-10 23:45 | 2026-04-11 05:00 |
| **Total** | **399** | | | | **0** | | |
**Observations:**
- **Zero failures across all 399 API calls** — pipeline fully stable.
- Location polling: 311 calls × ~19 devices/call = consistent fleet coverage. Averaging 493ms round-trip.
- Track list: 15 calls yielding 80 waypoints at 136s avg — the API is slow per call but returns full trail history correctly.
- Parking: 60 calls, all successful, all 0 rows — API is healthy, no parking events completed yet.
- Device sync (device.list+detail): runs every 5 hours; 2 runs complete, 126 device records synced.
- Alarm polling: activates conditionally; 11 calls catching both overnight alarms correctly.
### Recent Call Log (last 5 minutes)
Every 60s location sweep returning exactly 19 devices at ~200ms:
```
07:38:13 location.list 63 queried → 19 upserted 230ms
07:37:13 location.list 63 queried → 19 upserted 214ms
07:36:12 location.list 63 queried → 19 upserted 223ms
07:36:04 parking 13+50 queried → 0 inserted 14,562ms + 7,293ms
07:35:11 location.list 63 queried → 19 upserted 195ms
```
---
## 12. Odometer Leaders & Service Flags
Devices with reported odometer readings (ascending by mileage):
| Rank | Device | Model | SIM | Odometer (km) | Subscription Expires |
|---|---|---|---|---|---|
| 1 | **KDK 829A GP** | GT06E | 0707923872 | **239,264** | 2042-10-29 |
| 2 | **Belta KCU-647D** | GT06E | 0110094465 | **234,546** | 2040-04-03 |
| 3 | JK Subaru KCS 903Y | GT06E | 0746759925 | 73,345 | 2039-06-12 |
| 4 | KCU 865Q Vanguard | GT06E | 0757270763 | 61,758 | 2039-12-20 |
| 5 | KCU 145Q Solo Xtrail | GT06E | 0757270810 | 53,228 | 2039-12-20 |
| 6 | KCU 865Q Vanguard Sub | AT4 | 0757270804 | 9,656 | 2039-12-20 |
| 7 | JC400P-89431 | JC400P | — | 7,375 | — |
| 8 | JC400P-86270 | JC400P | — | 6,931 | — |
| 9 | KMGR 409U HENRY JAZZ | X3 | 0768697302 | 6,696 | 2035-07-31 |
| 10 | KDU 878T_Track | X3 | 0708352823 | 4,802 | 2035-08-18 |
| 11 | KCS 903Y JK SUB | AT4 | 0700024569 | 4,492 | 2039-06-09 |
| 12 | X3-63282 | X3 | — | 4,194 | 2036-02-14 |
| 13 | JC400P-91619 | JC400P | — | 3,719 | — |
| 14 | KMEH 692C KAWASAKI | AT4 | 0110094467 | 3,319 | 2040-04-03 |
| 15 | FRED KMGW 538W HULETI | X3 | 0119867174 | 2,284 | 2036-02-08 |
> **KDK 829A GP (239,264 km) and Belta KCU-647D (234,546 km) are critical service flags.** Both exceed typical major maintenance thresholds. Both are GT06E OBD trackers — their odometer readings come directly from the vehicle's ECU, making them more reliable than GPS-estimated mileage. Recommend immediate physical inspection.
---
## 13. Subscription Status
| Category | Count | Notes |
|---|---|---|
| No expiry date set | **44** | All are the 44 silent/no-position devices — likely unactivated |
| Already expired | 0 | None expired |
| Expiring within 90 days | 0 | None imminent |
| Valid long-term (> 90 days) | **19** | All the devices with live positions |
The 44 devices with no expiry are the same 44 with no position data. This strongly suggests they have never been activated on the Tracksolid platform (no SIM, no subscription, never commissioned).
---
## 14. Geographic Anomaly — X3-63282
**X3-63282 is consistently reporting from Uganda (~0.196°N, 32.540°E) near Kampala.**
Evidence this is real (not a GPS glitch):
- 29 fixes over 24 hours, all from the same coordinates
- Track_list high-res trail confirms 5 more waypoints at the same location
- Device is actively pinging every 60 seconds (GPS signal quality: 4/4, 11 satellites)
- Subscription is valid until 2036-02-14
- Odometer reads 4,194 km
**This device is genuinely located in Uganda and actively communicating.**
Possible explanations:
1. Vehicle on a cross-border logistics trip (Nairobi → Kampala corridor)
2. Device removed and travelling separately from the vehicle
3. Device installed in a vehicle belonging to a different entity
**Action required:** Contact driver or responsible manager immediately to confirm vehicle location, mission, and expected return.
---
## 15. Silent Devices — Full List (44 devices)
All 44 devices with no position data and no subscription expiry set:
| Model | Devices |
|---|---|
| AT4 (18) | AT4-51820, AT4-53099, AT4-54246, AT4-55029, AT4-55235, AT4-57389, AT4-61860, AT4-64823, AT4-64880, AT4-64989, AT4-65010, AT4-65135, AT4-65341, AT4-65598, AT4-65648, AT4-66158, AT4-67271, AT4-67693 |
| JC400P (20) | JC400P-07904, JC400P-85041, JC400P-85058, JC400P-86270, JC400P-86403, JC400P-87625, JC400P-87831, JC400P-89431, JC400P-89530, JC400P-89563, JC400P-89662, JC400P-89977, JC400P-90108, JC400P-90199, JC400P-90678, JC400P-91619, JC400P-92278, JC400P-92716, JC400P-92732, JC400P-94233 |
| GT06E (2) | GT06E-85428, GT06E-86319 |
| X3 (4) | X3-59405, X3-64223, X3-69172, X3-78553 |
> **18 AT4 + 20 JC400P = 38 of the 44 silent devices are AT4s and JC400Ps** — the two largest model groups. This is a significant inventory of undeployed trackers. Either these are in storage awaiting vehicle installation, or they represent a large batch of devices purchased but not yet commissioned.
---
## 16. Schema Additions Confirmed (Migration 05)
### New columns on existing tables
**`tracksolid.trips`:**
- `distance_km` (renamed + corrected from `distance_m`)
- `max_speed_kmh`
**`tracksolid.obd_readings`** — normalized scalar columns:
- `engine_rpm`, `coolant_temp_c`, `fuel_level_pct`, `battery_voltage`
- `intake_pressure`, `throttle_pct`, `vehicle_speed`, `engine_load_pct`
**`tracksolid.alarms`** — enrichment:
- `severity`, `geofence_id`, `geofence_name`
- `acknowledged_at`, `acknowledged_by`
**`tracksolid.devices`** — vehicle enrichment:
- `vehicle_category`, `cost_centre`, `assigned_route`
- `depot_geom`, `depot_address`
### New tables confirmed present
| Table | Type | Purpose |
|---|---|---|
| `tracksolid.device_events` | Regular | Login/logout events (PUSH-01) |
| `tracksolid.fuel_readings` | Hypertable | Fuel sensor readings (PUSH-02) |
| `tracksolid.temperature_readings` | Hypertable | Temperature/humidity (PUSH-03) |
| `tracksolid.lbs_readings` | Regular | Cell tower fallback positions (PUSH-04) |
| `tracksolid.geofences` | Regular | Geofence zone storage |
### DWH Gold layer
| Object | Status |
|---|---|
| `dwh_gold.dim_vehicles` | Present, 0 rows |
| `dwh_gold.fact_daily_fleet_metrics` | Present, 0 rows — ETL function not yet run |
---
## 17. Data Quality Gaps — Priority Matrix
### P0 — Blocks all driver / vehicle reporting
| Gap | Scope | Action |
|---|---|---|
| `vehicle_number`, `vehicle_name`, `driver_name` blank | All 63 devices | Bulk populate via Tracksolid Pro admin or API |
| 44 devices never activated (no SIM, no position) | 70% of fleet | Commission or confirm storage status per device |
### P1 — Blocks operational analytics
| Gap | Scope | Action |
|---|---|---|
| No push webhooks registered | OBD, fuel, temp, events, LBS all empty | Register 6 endpoints in Tracksolid Pro |
| Parking: 0 rows despite 60 API calls | Cannot compute idle time or utilisation | Validate post-morning operations |
| Trips: 0 rows | All KPIs unavailable | Validate first morning trips >07:00 EAT |
| `fuel_100km` not set | No cost-per-trip or fuel efficiency | Set per vehicle class |
### P2 — Limits reporting depth
| Gap | Scope | Action |
|---|---|---|
| No geofences configured | No zone detection, no off-route alerts | Create depot + key-site geofences |
| `vehicle_category` blank | Cannot segment by vehicle type | Populate alongside vehicle_number |
| `cost_centre` blank | Cannot allocate costs to business units | Populate alongside vehicle_number |
| `depot_geom` blank | Cannot compute distance-from-base | Set primary depot coordinates |
| DWH gold empty | Grafana summary panels empty | Run `dwh_gold.refresh_daily_metrics()` after first full day |
---
## 18. Grafana Dashboard Readiness
| Panel | Ready | Condition |
|---|---|---|
| Fleet map — live positions | **Partial** | 19/63 visible; 44 offline |
| Position trail / route replay | **Ready** | 137 fixes, growing each cycle |
| Alarm feed | **Ready** | Live; will grow with operations |
| Active device count | **Ready** | 4 devices active in last 24h |
| Trips today | **Not ready** | Validate post-07:00 EAT |
| Distance per vehicle | **Not ready** | Requires trips data |
| Driver behaviour (speed, harsh events) | **Not ready** | Requires trips + driver metadata |
| Fuel efficiency | **Not ready** | Requires fuel_100km + OBD/fuel data |
| Device connectivity uptime | **Not ready** | Requires `/pushevent` webhook |
| Cold chain temperature | **Not ready** | Requires `/pushtem` webhook |
| Odometer / service alerts | **Ready** | 15 devices with odometer data |
---
## 19. Recommended Actions (Priority Order)
1. **Populate vehicle metadata**`vehicle_number`, `vehicle_name`, `driver_name` for all 63 devices. Single most impactful action — unlocks driver scoring, trip attribution, and all KPIs from `01_BusinessAnalytics.md`.
2. **Investigate X3-63282 in Uganda** — Contact driver/manager today. Confirm cross-border mission or escalate as potential asset displacement.
3. **Schedule morning data validation** — At 09:00 EAT run trip, parking, and alarm queries to confirm pipeline behaviour during active operations.
4. **Register push webhooks** in Tracksolid Pro:
- `/pushtripreport`
- `/pushobd`
- `/pushoil`
- `/pushtem`
- `/pushlbs`
- `/pushevent`
5. **Audit 44 silent devices** — Determine which are: (a) in storage awaiting installation, (b) installed but SIM not provisioned, (c) decommissioned. Log the outcome per IMEI.
6. **Flag KDK 829A GP and Belta KCU-647D for service** — 239k km and 234k km respectively. Both actively communicating and in use.
7. **Set `fuel_100km`** per vehicle class to enable cost reporting.
8. **Configure primary depot geofence** at ~(-1.237, 36.727) — the tight cluster where most of the fleet is parked.
9. **Run DWH gold ETL** after first full operational day:
```sql
SELECT dwh_gold.refresh_daily_metrics(CURRENT_DATE - 1);
```
---
*End of report. Data queried: 2026-04-11 ~07:38 EAT. Next full refresh recommended: 2026-04-11 12:00 EAT after morning operations complete.*