Connect the EAM / CMMS side of the enterprise landscape your utility already runs — IBM Maximo (OSLC) and Cityworks (AMS REST) — through an optional loopback Python sidecar. Assets and work orders come back as GeoJSON, land in a GPKG-backed cache, and resolve onto the map beside PLS-CADD structures, OMS outages, and damage hotspots. Pair it with Microsoft Fabric OneLake and SharePoint lists for the full enterprise-systems picture.
The host speaks REST to a local middleware that speaks Maximo / Cityworks. Credentials stay DPAPI-encrypted at rest. Geo resolution prefers native XY, then a GIS asset register, then geocoding — unresolved records stay visible with an honest status rather than vanishing.
/api/eam/capabilities; 503 + install hint when the sidecar isn’t available (same contract as SNAP / roofer / PostDuck).GET /api/eam/assets and /work-orders return GeoJSON FeatureCollections; fresh=1 bypasses cache.GET /api/eam/capabilities POST /api/eam/start → boot sidecar GET /api/eam/assets?fresh=0 GET /api/eam/work-orders GET /api/eam/health // secrets: DPAPI at <dataDir>/eam/ ● providers Maximo · Cityworks
Keep Maximo / Cityworks as system of record — VoltGrid is the geospatial twin, not a second CMMS.
Native coordinates when present; register lookup and geocode when the EAM only has an address or location id.
Optional sidecar, loopback bind, DPAPI secrets — degrade cleanly when the middleware isn’t installed.
Honest boundary: shipping surface is read of assets / work orders + geo resolution + cache. Write-back, SSE push from the EAM, and ML reverse-proxy are later phases. Requires operator install of the Python middleware when connecting live Maximo / Cityworks.