
Geospatial Telematics Developer
- 31 installs
- 7 repo stars
- Updated May 20, 2026
- daemon-blockint-tech/agentic-enteprises-skill
Guides location-aware systems: CRS/projections, GeoJSON/Shapefile/GeoTIFF/MVT, PostGIS spatial SQL, tiling, OGC services, map matching, geofencing, and fleet telematics.
About
Guides geospatial and telematics development covering coordinate systems, vector/raster formats, PostGIS spatial queries, tiling, trajectories, geofencing, and GPS/GNSS fleet ingestion. A developer uses it when building location services, spatial queries, or telematics pipelines.
- PostGIS spatial SQL with GiST/BRIN indexing and vector-tile pyramids
- Fleet telematics ingestion: NMEA parsing, device vs server timestamps
Geospatial Telematics Developer by the numbers
- 31 all-time installs (skills.sh)
- Ranked #3,366 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/daemon-blockint-tech/agentic-enteprises-skill --skill geospatial-telematics-developerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 31 |
|---|---|
| repo stars | ★ 7 |
| Last updated | May 20, 2026 |
| Repository | daemon-blockint-tech/agentic-enteprises-skill ↗ |
What it does
Guides location-aware systems: CRS/projections, GeoJSON/Shapefile/GeoTIFF/MVT, PostGIS spatial SQL, tiling, OGC services, map matching, geofencing, and fleet telematics.
Files
Geospatial and Telematics Developer
When to Use
- Design location-aware services—ingest, store, query, and serve positions, trajectories, and regions
- Implement CRS and projections—WGS84, local projected CRS, reprojection policy, bounds checks
- Work with vector and raster formats—GeoJSON, Shapefile, GeoTIFF, MVT; validation and simplification
- Build PostGIS / spatial SQL—geometry types, predicates, indexes, aggregates, and performance tuning
- Plan spatial indexing and tiling—GiST/BRIN, H3/S2 grids, vector tile pyramids, cache keys
- Integrate OGC map services—WMS, WFS, WMTS clients; layer metadata, bbox, and auth at integration level
- Process trajectories—dedupe, gap-fill policy, map matching hooks, stop detection, trip segmentation
- Implement geofencing—enter/exit/dwell, buffered predicates, timezone and schedule rules
- Ingest fleet telematics—GPS/GNSS fixes, NMEA parsing, device vs server timestamps, CAN-linked metadata
- Operate streams and batch ETL—Kafka/Kinesis-style pipelines, late data, idempotency, replay
- Address privacy and accuracy—precision reduction, retention, consent, jitter, and audit needs
When NOT to Use
- Pure OR routing / VRP / MIP without geospatial implementation (tiles, CRS, spatial DB, ingestion) →
operations-research-algorithm-developer - Multi-sensor perception fusion (LiDAR, radar, EKF/MOT, calibration) for autonomy →
sensor-fusion-engineer - WMS warehouse workflows—waves, pick paths, RF scanning, inventory allocation →
wms-developer - Snowflake/BigQuery marts, dbt, dimensional modeling without operational geo store →
data-warehouse-engineer - Generic backend, CRUD APIs, or cloud microservices without location domain →
senior-software-engineer - Simulation platform software—physics engines, SIL/HIL rigs, deterministic replay frameworks →
simulation-software-engineer - Robotics cell integration—PLC/AMR orchestration without fleet/geo pipeline ownership →
robotics-automation-integration-engineer - Legal privacy counsel or regulatory filings—route to legal/compliance; implement technical controls only
Related skills
| Need | Skill |
|---|---|
| VRP, scheduling, MIP, solver-based routing optimization | operations-research-algorithm-developer |
| LiDAR/camera/radar/IMU fusion, tracking, calibration | sensor-fusion-engineer |
| Warehouse operational workflows and WMS logic | wms-developer |
| Analytics warehouse, dbt, BI semantic layers | data-warehouse-engineer |
| Enterprise application and API engineering | senior-software-engineer |
| DES/physics sim platforms, digital twins | simulation-software-engineer |
| AMR/PLC integration, material-handling automation | robotics-automation-integration-engineer |
| Stream/batch data platform patterns (non-geo-specific) | analytics-data-engineer |
| Production SLOs, on-call, incident response | site-reliability-engineer |
Core Workflows
1. Scope and boundaries
Define geo/telematics footprint, consumers, retention, and handoffs.
See `references/geospatial_telematics_scope.md`.
2. Coordinates, projections, and formats
Pick CRS, validate geometries, and standardize exchange formats.
See `references/coordinates_projections_and_formats.md`.
3. Spatial databases and queries
Model schemas, indexes, predicates, and query plans in PostGIS or equivalent.
See `references/spatial_databases_and_queries.md`.
4. Telematics ingestion and quality
Parse device feeds, timestamp policy, quality flags, and batch/stream contracts.
See `references/telematics_ingestion_and_quality.md`.
5. Geofencing, tracking, and map matching
Rules engines, trajectory logic, and map-matching integration boundaries.
See `references/geofencing_tracking_and_map_matching.md`.
6. Serving APIs and operations
Tile/map APIs, OGC integration, monitoring, privacy controls, and runbooks.
See `references/serving_apis_and_operations.md`.
Outputs
- Location data model — entities, geometry columns, SRID, time columns, partition keys
- Ingestion contract — schema, idempotency keys, late-data policy, quality dimensions
- Spatial index and tiling plan — indexes, grid choice, zoom levels, cache invalidation
- Query and API spec — predicates, bbox rules, pagination, rate limits, error codes
- Geofence catalog — regions, triggers, debounce, timezone rules, audit trail
- Trajectory processing note — segmentation, map-matching vendor boundary, stop detection
- Privacy and retention matrix — precision, TTL, export controls, deletion hooks
- Operations runbook — lag alarms, replay procedure, CRS migration checklist
Principles
- Fix CRS and time first — wrong SRID or clock skew dominates downstream “algorithm” bugs
- Store raw plus derived — keep device fixes; derive matched/snapped layers with version pins
- Index for real queries — design GiST/grid indexes around bbox + time filters actually used
- Treat ingestion as idempotent — device sequence, dedupe keys, and replay-safe upserts
- Separate operational geo from analytics — OLTP/track store vs warehouse marts (
data-warehouse-engineer) - Document accuracy and privacy — horizontal accuracy, sampling rate, reduction, and lawful basis
- Integrate OGC; do not re-spec the standards — client patterns and failure modes, not full spec rewrite
When to load references
| Topic | Reference |
|---|---|
| Role scope, RACI, boundaries | references/geospatial_telematics_scope.md |
| CRS, projections, file formats | references/coordinates_projections_and_formats.md |
| PostGIS, indexes, spatial SQL | references/spatial_databases_and_queries.md |
| GPS/NMEA, streams, data quality | references/telematics_ingestion_and_quality.md |
| Geofences, trips, map matching | references/geofencing_tracking_and_map_matching.md |
| Tiles, OGC, APIs, ops, privacy | references/serving_apis_and_operations.md |
Coordinates, projections, and formats
Table of contents
1. CRS policy 2. Common CRS choices 3. Reprojection rules 4. Vector formats 5. Raster formats 6. Validation checklist
CRS policy
| Layer | Typical choice | Notes |
|---|---|---|
| Ingest / API exchange | EPSG:4326 (WGS84 lat/lon) | Interop default; document axis order (lon, lat) for GeoJSON |
| Storage (global fleet) | 4326 or 3857 | 4326 for degrees; 3857 only if web-map native queries dominate |
| Local metric work | UTM zone, state plane, national grid | Pick zone from asset home region; avoid mixing zones in one table |
| Distance / buffer in SQL | Geography type or projected CRS | ST_Distance on geography (meters) or project then measure |
Never mix SRIDs in one geometry column. Always set ST_SetSRID on insert and validate bounds.
Common CRS choices
| Use case | EPSG examples |
|---|---|
| Worldwide lat/lon | 4326 |
| Web map display meters | 3857 (Web Mercator)—display only; poor for high-latitude area metrics |
| US state plane | 22xx–29xx (zone-specific) |
| UTM northern hemisphere | 326xx (zone = 326 + zone number) |
Reprojection rules
- Reproject once at a defined boundary (ingest, API response, or export)—not repeatedly in hot paths
- Use
ST_Transform(geom, target_srid)in PostGIS; pin PROJ versions in production images - For bbox queries across zones, prefer geography predicates or precomputed grid cells (H3/S2)
- Log source SRID on ingest when devices report local grids
Vector formats
| Format | When to use | Pitfalls |
|---|---|---|
| GeoJSON | APIs, small/medium extracts | Large payloads; ring orientation; validate with ST_IsValid |
| Shapefile | Legacy GIS exchange | 2 GB limits; .prj required; field name length |
| FlatGeobuf / GeoParquet | Analytics interchange | Schema evolution; partition by region/time |
| MVT | Basemap overlay tiles | Simplify appropriately per zoom; attribute thinning |
GeoJSON conventions: RFC 7946, coordinates [longitude, latitude], right-hand rule for polygons.
Raster formats
| Format | When to use | Pitfalls |
|---|---|---|
| GeoTIFF | Elevation, imagery, heatmaps | CRS in geokeys; overviews; COG for cloud range reads |
| Cloud Optimized GeoTIFF (COG) | Object-store serving | HTTP range requests; internal tiling |
| PNG/WebP tiles | Cached basemaps | Not georeferenced without companion metadata |
Validation checklist
- [ ] SRID set on every geometry inserted
- [ ]
ST_IsValid/ST_MakeValidpolicy documented for bad polygons - [ ] Antimeridian and pole crossings handled for global fleets
- [ ] Precision documented (decimal places vs true GNSS accuracy)
- [ ] File imports include
.prjor explicit CRS metadata - [ ] Simplification tolerance scales with zoom level for tiles
Geofencing, tracking, and map matching
Table of contents
1. Geofencing models 2. Spatial predicates for fences 3. Event semantics 4. Trajectory processing 5. Map matching integration 6. Stop and trip detection
Geofencing models
| Shape | Pros | Cons |
|---|---|---|
| Polygon | Precise sites, yards, campuses | Requires valid topology; maintenance |
| Circle (center + radius) | Simple yards | Poor fit for irregular sites |
| Corridor buffer | Routes, highways | Needs centerline geometry |
| Grid cell (H3) | Fast prefilter | Coarse; combine with precise polygon |
Store fences in PostGIS with SRID documented; prefilter candidates with bbox or H3 before precise predicate.
Spatial predicates for fences
| Rule | Predicate notes |
|---|---|
| Inside | ST_Contains(fence, point) — boundary behavior explicit |
| Enter | Transition outside → inside between consecutive fixes |
| Exit | Inside → outside |
| Dwell | Inside for ≥ T seconds without exit |
| Buffered fence | ST_DWithin(point::geography, fence::geography, buffer_m) |
Debounce: require N consecutive inside samples or minimum dwell before ENTER to reduce GPS jitter false triggers.
Event semantics
Emit events with:
asset_id,fence_id,event_type(ENTER/EXIT/DWELL)ts_event,position,confidencerule_versionfor reproducibility
Downstream consumers (billing, alerts, workflow) must tolerate at-least-once delivery—dedupe on natural keys.
Trajectory processing
Pipeline stages (conceptual):
1. Normalize — CRS, units, canonical fix schema 2. Filter — quality flags, impossible speed 3. Segment — trips on ignition/gap/stop rules 4. Enrich — geofence hits, timezone, jurisdiction 5. Match (optional) — snap to network; store vendor + graph version 6. Publish — API and warehouse export interfaces
Keep raw and derived layers; never overwrite raw fixes with snapped coordinates.
Map matching integration
| Approach | When |
|---|---|
| External API (OSRM-like, commercial MM) | Production fleets; graph maintained by vendor |
| Self-hosted routing graph | High scale, licensed road data, dedicated team |
| Simple snap | Low stakes yard maps only—not public road inference |
Contract boundaries:
- Input: ordered fixes + timestamps + optional heading
- Output: matched polyline, edge IDs, confidence, distance on network
- Failure: return unmatched with reason; do not block raw ingest
Do not implement full routing graph maintenance inside generic app services—coordinate with operations-research-algorithm-developer for optimization on top of matched networks.
Stop and trip detection
| Signal | Heuristic |
|---|---|
| Speed < threshold for T seconds | Stop |
| Ignition off | End trip (if available) |
| Gap > T minutes | Split trip |
| Geofence depot enter | Start/end shift events |
Tune thresholds per asset class (truck vs trailer vs handheld). Document in configuration, not hard-coded constants.
Geospatial and telematics scope
Table of contents
1. Purpose 2. Terminology 3. In scope 4. Out of scope 5. Roles and RACI 6. Handoffs
Purpose
Define boundaries for building and integrating location-aware systems—from device/fix ingestion through spatial storage, processing, and map-facing APIs.
This skill covers implementation patterns, data contracts, and operations—not legal privacy advice, autonomy perception fusion, or warehouse operational workflows.
Terminology
| Term | Meaning |
|---|---|
| CRS | Coordinate reference system—defines how coordinates relate to the Earth |
| SRID | Spatial reference ID—numeric CRS identifier (e.g. 4326 for WGS84 geographic) |
| Fix | Single GNSS position sample with lat/lon and optional accuracy metadata |
| Trajectory | Time-ordered sequence of fixes for one asset |
| Map matching | Snapping raw GPS to road/path network (often vendor or graph service) |
| Geofence | Region boundary with enter/exit/dwell semantics |
| MVT | Mapbox Vector Tiles—protobuf tiles for vector map layers |
| OGC | Open Geospatial Consortium—WMS, WFS, WMTS service standards |
| PostGIS | PostgreSQL extension for spatial types and functions |
| Telematics | Fleet/vehicle location and related device metadata |
In scope
| Area | Examples |
|---|---|
| CRS and projections | WGS84 storage, local UTM/state plane for distance, reprojection on read/write |
| Data formats | GeoJSON, Shapefile, GeoTIFF, MVT generation/consumption |
| Spatial databases | PostGIS schemas, spatial SQL, indexes, partitioning by time/region |
| Tiling and indexes | Vector/raster pyramids, H3/S2 bins, GiST/BRIN, tile cache keys |
| OGC integration | WMS/WFS/WMTS clients, GetCapabilities, bbox/layer params, auth |
| Trajectories | Dedupe, gap policy, trip segmentation, stop detection hooks |
| Geofencing | Polygon/circle fences, predicates, debounce, event emission |
| Telematics ingest | NMEA, proprietary JSON, MQTT/Kafka streams, batch files |
| Streams and ETL | Late data, watermarking, idempotent upserts, replay |
| Privacy and accuracy | Precision reduction, retention TTL, audit logs |
Out of scope
| Topic | Route to |
|---|---|
| VRP/MIP/scheduling without geo stack | operations-research-algorithm-developer |
| LiDAR/camera/radar fusion, EKF, MOT | sensor-fusion-engineer |
| WMS pick/wave/inventory workflows | wms-developer |
| dbt marts, dimensional models, BI layers | data-warehouse-engineer |
| Generic CRUD/cloud without location domain | senior-software-engineer |
| Physics/DES simulation platforms | simulation-software-engineer |
| PLC/AMR cell integration without fleet geo | robotics-automation-integration-engineer |
| Legal GDPR/CCPA program interpretation | Legal / compliance |
| Turn-by-turn navigation UX product ownership | Product / mobile teams |
Roles and RACI
| Activity | Geo/telematics dev | Fleet ops | Data platform | Security/privacy | Map vendor |
|---|---|---|---|---|---|
| Ingestion schema and quality rules | A | C | C | I | I |
| PostGIS schema and spatial indexes | A | I | C | I | I |
| Geofence catalog and rules | A | C | I | C | I |
| Map matching vendor integration | A | C | I | I | C |
| Tile/map API SLOs | A | I | C | I | C |
| Retention and precision policy | C | C | C | A | I |
| OR-based dispatch optimization | C | A | I | I | I |
Handoffs
| To skill | When |
|---|---|
operations-research-algorithm-developer | Optimization model needs distance matrices or VRP—provide clean OD inputs, not duplicate routing math in app layer |
sensor-fusion-engineer | Autonomy stack needs world-frame poses—agree on frame conventions and timestamps; do not merge perception fusion into fleet ingest |
data-warehouse-engineer | Analytics on trips, utilization, heatmaps—replicate or export with documented grain; keep OLTP track store authoritative |
senior-software-engineer | Shared auth, billing, non-geo microservices—expose stable location APIs |
site-reliability-engineer | Lag, cardinality, and incident playbooks for ingest and tile services |
Serving APIs and operations
Table of contents
1. API surfaces 2. Tile and map serving 3. OGC integration 4. Caching and CDN 5. Privacy and retention 6. Monitoring and runbooks
API surfaces
| API | Typical operations |
|---|---|
| REST/JSON | Last position, history bbox+time, geofence CRUD, event webhooks |
| WebSocket / SSE | Live asset positions (throttled) |
| gRPC | High-volume internal consumers |
Contract essentials:
- Required
time_start/time_endon history endpoints - Max points per response; pagination cursors
- Explicit
sridon geometry fields - Rate limits per tenant and per asset subscription tier
Tile and map serving
| Layer | Pattern |
|---|---|
| Vector tiles (MVT) | Tippecanoe or pg_tileserv; simplify per zoom |
| Raster tiles | GeoTIFF/COG or pre-rendered PNG pyramid |
| Dynamic features | Short TTL cache; bbox-aligned requests |
Tile URL template example pattern: /{z}/{x}/{y}.mvt?layer=fences&tenant=
Invalidate caches on geofence publish and style version bump.
OGC integration
Integration-level guidance (not full spec):
| Service | Client responsibilities |
|---|---|
| WMS | GetMap with CRS, bbox, layers, format; handle exceptions XML |
| WFS | GetFeature with bbox/filter; GML/GeoJSON output negotiation |
| WMTS | Tile matrix set alignment; cache templates |
Pin supported CRS list from GetCapabilities; fail fast on unsupported combinations.
Caching and CDN
| Content | Cache key inputs |
|---|---|
| Static basemap tiles | z/x/y + style version |
| MVT fences/assets | z/x/y + tenant + data version |
| Last position API | Do not CDN-cache; short in-memory only |
Use ETag or version query params for cache busting after data migrations.
Privacy and retention
| Control | Implementation hint |
|---|---|
| Precision reduction | Truncate coords at storage or API by role |
| Retention TTL | Partition drops; legal hold flags |
| Access audit | Log who queried which asset history |
| Export | Minimum fields; approval workflow for bulk export |
| Public sharing | Avoid exact home locations; use geohash coarsening |
Coordinate with legal/compliance on lawful basis—implement technical controls only.
Monitoring and runbooks
| Metric | Alert when |
|---|---|
| Ingest lag p99 | Above SLA (e.g. > 60s) |
| Reject rate | Spike vs 7-day baseline |
| PostGIS query p95 | Bbox history > budget |
| Tile error rate | 5xx on tile endpoint |
| Geofence evaluator backlog | Queue depth sustained |
Runbook snippets:
- CRS migration: add column → backfill → dual-write → cutover → drop old
- Replay day: pause derived jobs → replay Kafka topic with keys → rebuild trips
- Map vendor outage: serve raw tracks; flag
matched=falsein API
Hand off production incidents to site-reliability-engineer when SLOs and infra are involved.
Spatial databases and queries
Table of contents
1. Schema patterns 2. Geometry vs geography 3. Indexes 4. Common predicates 5. Query performance 6. Partitioning
Schema patterns
Track point (hot path):
-- asset_id, ts_utc, geom (Point, 4326), speed_mps, heading_deg,
-- accuracy_m, source_device_id, ingest_idGeofence region:
-- fence_id, name, geom (Polygon, 4326), buffer_m, active, rules_jsonTrip segment (derived):
-- trip_id, asset_id, start_ts, end_ts, geom (LineString, 4326), distance_mStore raw fixes separately from matched/snapped geometries; version map-matching vendor and graph date.
Geometry vs geography
| Type | Use when |
|---|---|
geometry | Projected CRS for local editing; explicit ST_Transform for metrics |
geography | Global fleets; distances/areas in meters with lon/lat storage |
Example bbox filter (WGS84 points):
WHERE geom && ST_MakeEnvelope($minx, $miny, $maxx, $maxy, 4326)
AND ST_Intersects(geom, ST_MakeEnvelope($minx, $miny, $maxx, $maxy, 4326))Use && for index-friendly envelope prefilter before ST_Intersects.
Indexes
| Index | Use when |
|---|---|
| GiST on geometry/geography | Bbox, intersects, nearest-neighbor (with care) |
| BRIN on time + coarse geo | Append-only track history, time-range scans |
B-tree on (asset_id, ts_utc) | Primary trajectory lookups |
| Grid/H3 column (text/int) | Bucketed aggregates, geofence candidate filtering |
Create indexes after load on large migrations; ANALYZE after bulk ingest.
Common predicates
| Need | PostGIS pattern |
|---|---|
| Inside geofence | ST_Contains(fence.geom, point.geom) or ST_Within(point, fence) |
| Within radius | ST_DWithin(geog_a, geog_b, radius_m) |
| Along corridor | ST_DWithin(point, route_line, buffer_m) |
| Nearest road (prep) | Precompute graph IDs via map-matching service—not ad hoc ST_ClosestPoint on full linework in OLTP |
Query performance
- Avoid
ST_Transformon every row in hot queries—materialize projected columns if needed - Cap result counts; require time window + asset filter for track history APIs
- Use simplified geometries for low-zoom map responses
- Watch cardinality of DISTINCT spatial joins—pre-bin by H3 where possible
Partitioning
| Strategy | Fit |
|---|---|
| Time range (monthly) on track tables | High-volume telematics |
| List by tenant/region | Multi-tenant fleets |
| Archival to object store (Parquet/COG) | Cold history; keep metadata in catalog |
Document retention drop jobs per partition and legal hold exceptions.
Telematics ingestion and quality
Table of contents
1. Ingestion channels 2. NMEA and device payloads 3. Timestamps 4. Quality dimensions 5. Stream and batch patterns 6. CAN-linked metadata 7. Idempotency and replay
Ingestion channels
| Channel | Typical pattern | Notes |
|---|---|---|
| MQTT / device gateway | Per-device topics, QoS1 | Auth per device; payload size limits |
| HTTPS batch upload | Mobile SDK backoff | Signed uploads; gzip JSON |
| Kafka / Kinesis | Partition by asset_id | Preserve per-asset ordering |
| SFTP / object files | Nightly vendor drops | Schema registry; quarantine bad files |
NMEA and device payloads
Common sentences (conceptual—validate against device spec):
| Sentence | Fields of interest |
|---|---|
| GGA | Fix quality, lat/lon, HDOP, altitude |
| RMC | Speed over ground, course, date/time |
| GSA / GSV | Satellite visibility (quality diagnostics) |
Proprietary JSON often includes: lat, lon, speed, heading, accuracy, ignition, odometer, event_code.
Parse in a dedicated ingest worker; emit normalized canonical fix records to the spatial store.
Timestamps
| Clock | Use |
|---|---|
| Device GNSS time | Preferred for kinematics when trustworthy |
| Device wall clock | Fallback; detect skew vs server |
| Server ingest time | Latency monitoring; not for trip logic |
Policies:
- Reject or flag fixes > N minutes in the future
- Define late arrival window (e.g. 24–72h) for stream processing
- Store all three when available:
ts_device,ts_gnss,ts_ingest
Quality dimensions
| Flag | Detection | Downstream |
|---|---|---|
| No fix | Missing lat/lon or fix quality invalid | Drop or dead-letter |
| Low accuracy | HDOP/accuracy meters above threshold | Weight down in analytics |
| Duplicate | Same asset + timestamp + rounded coords | Idempotent upsert |
| Teleport | Speed implied > physical max | Split trip; quarantine |
| Jitter | Stationary spread | Snap only after stop detection |
| Time gap | Δt > threshold | End trip; new segment |
Expose quality as columns or sidecar table—do not silently discard without audit.
Stream and batch patterns
device → ingest → validate → enrich (tenant, asset) → publish fix event → spatial writer- Watermark on event time for windowed aggregations
- Dead-letter queue for schema violations
- Batch backfill replays with same idempotency keys as live path
CAN-linked metadata
Conceptual linkage only—implementation varies by OEM:
| Signal | Geo use |
|---|---|
| Odometer | Distance reconciliation vs GPS |
| Ignition | Stop detection corroboration |
| Fuel / engine hours | Utilization analytics (not spatial core) |
| DTC codes | Correlate breakdown events with last known position |
Do not claim safety-critical CAN semantics unless under automotive safety process.
Idempotency and replay
| Key component | Recommendation |
|---|---|
| Natural key | (tenant_id, asset_id, ts_device, source_seq) |
| Upsert | ON CONFLICT DO UPDATE with monotonic source_seq |
| Replay | Same keys; versioned derived tables for map match |
| Audit | Count raw vs accepted vs rejected per batch |
Monitor ingest lag (p50/p99), reject rate, and duplicate rate per device firmware version.