{
  "product": "Prime RMS",
  "updatedAt": "2026-09-28",
  "goal": "Full parity with Thunder RMS, Huawei NetEco class and Galooli class platforms, plus a plug and play gateway SDK",
  "benchmarks": [
    "Thunder RMS (Brillanz)",
    "Huawei NetEco 6000 + SMU",
    "Galooli / Inala class SaaS",
    "ThingsBoard class engine"
  ],
  "weights": {
    "critical": 3,
    "high": 2,
    "normal": 1
  },
  "sections": [
    {
      "id": "ingest",
      "title": "Gateway ingest and plug and play SDK",
      "items": [
        {
          "id": "sdk.agent",
          "title": "Prime Gate Agent for Linux gateways (one line installer, systemd, enrollment codes)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder Pulse firmware; Galooli gateway",
          "evidence": "sdk/, install.sh, prime-gate enroll|read|run"
        },
        {
          "id": "sdk.modbus",
          "title": "Modbus RTU and TCP driver (holding, input, coils, discrete, 16 and 32 bit, floats, bit masks, writes)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "All benchmarks"
        },
        {
          "id": "sdk.snmp",
          "title": "SNMP v1, v2c, v3 driver (GET and SET) for rectifier controllers and UPS",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder: MC2900 over SNMP"
        },
        {
          "id": "sdk.gpio",
          "title": "Digital I/O driver (GPIO and Modbus DI/DO modules) with alarms on occurrence",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder: 8 DI / 8 DO"
        },
        {
          "id": "sdk.saf",
          "title": "Store and forward buffer, 72 h minimum, deadband and forced samples",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder: >= 72 h buffering"
        },
        {
          "id": "sdk.health",
          "title": "Gateway self monitoring (CPU, memory, disk, temperature, uplink, cellular RSSI, link state)",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Africell: RMS / communication health"
        },
        {
          "id": "sdk.commands",
          "title": "Audited remote control: command queue, execution, read back, audit trail",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder: secured remote control"
        },
        {
          "id": "ingest.api",
          "title": "HTTPS ingest API with per gateway tokens (telemetry, events, heartbeat, point registry)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "ingest.mqtt",
          "title": "MQTT broker ingest (Sparkplug B and plain JSON) for third party gateways",
          "priority": "high",
          "status": "done",
          "parity": "Galooli, ThingsBoard",
          "done": "2026-09-27",
          "evidence": "embedded aedes broker: mqtts://rms.primerp.ai:8883, wss://rms.primerp.ai/mqtt, tcp 1883 internal; token auth, per gateway command topic; docs/mqtt.md"
        },
        {
          "id": "ingest.rutos",
          "title": "Teltonika RutOS Data to Server profile (no agent needed)",
          "priority": "high",
          "status": "done",
          "parity": "Karim record section 7",
          "done": "2026-09-27",
          "evidence": "docs/rutos-data-to-server.md: Data to Server template into /api/v1/gateway/telemetry"
        },
        {
          "id": "sdk.ota",
          "title": "Agent OTA update and remote config push from the console",
          "priority": "high",
          "status": "done",
          "parity": "Teltonika RMS, Galooli",
          "done": "2026-09-27",
          "evidence": "PUT /api/v1/gateways/:id/config + agent applies on heartbeat (validated, backup, restart); agent update/restart/reload via /gateways/:id/agent"
        },
        {
          "id": "sdk.certs",
          "title": "Per device certificates (mTLS) and secure boot guidance",
          "priority": "high",
          "status": "planned",
          "parity": "Karim record section 9 non negotiables"
        },
        {
          "id": "sdk.canbus",
          "title": "CAN bus BMS driver (Pylontech, Narada, Vestwoods)",
          "priority": "normal",
          "status": "planned"
        },
        {
          "id": "sdk.onvif",
          "title": "ONVIF camera driver (events, snapshots, tamper, motion)",
          "priority": "normal",
          "status": "planned",
          "parity": "Thunder CCTV line"
        },
        {
          "id": "sdk.veeder",
          "title": "Veeder-Root TLS-350/450 tank-gauge driver",
          "priority": "normal",
          "status": "planned",
          "parity": "Fuel depot ATG"
        },
        {
          "id": "ingest.lorawan",
          "title": "LoRaWAN sensors via the MQTT broker (no driver needed)",
          "priority": "normal",
          "status": "done",
          "parity": "Galooli wireless",
          "done": "2026-09-27",
          "evidence": "docs/integrations.md: point a LoRa gateway at mqtt broker"
        },
        {
          "id": "ingest.huawei",
          "title": "Huawei SMU / SmartLogger / SUN2000 / UPS integration (SNMP + Modbus TCP)",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Huawei NetEco fleets (D7 retrofit)",
          "evidence": "sdk/examples/huawei-smu-site.yaml + docs/integrations.md"
        },
        {
          "id": "sdk.profiles",
          "title": "Device profile library (brand/model presets) + include mechanism",
          "priority": "high",
          "status": "done",
          "done": "2026-09-28",
          "parity": "All benchmarks; brand-inclusive",
          "evidence": "sdk/prime_gate_agent/profiles + examples/scenario-*.yaml + docs/profiles.md"
        },
        {
          "id": "sdk.httpjson",
          "title": "HTTP/JSON driver for cloud + REST devices (SolarEdge, Victron, SMA, generic)",
          "priority": "normal",
          "status": "done",
          "done": "2026-09-28",
          "parity": "Galooli cloud connectors",
          "evidence": "sdk/prime_gate_agent/profiles + examples/scenario-*.yaml + docs/profiles.md"
        },
        {
          "id": "sdk.scenarios",
          "title": "Ready-made site scenario templates (telecom, solar-hybrid, fuel depot, data-center)",
          "priority": "normal",
          "status": "done",
          "done": "2026-09-28",
          "evidence": "sdk/prime_gate_agent/profiles + examples/scenario-*.yaml + docs/profiles.md"
        }
      ]
    },
    {
      "id": "core",
      "title": "Core platform",
      "items": [
        {
          "id": "core.tsdb",
          "title": "Time series store with monthly partitions and bucketed history API",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "core.alarms",
          "title": "Alarm engine: every parameter alarm bounded, Critical / Major / Minor / Warning, hysteresis, ack, manual clear",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder alarm engine; ISA 18.2"
        },
        {
          "id": "core.escalation",
          "title": "Auto escalation of unacknowledged critical and major alarms",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder"
        },
        {
          "id": "core.comm",
          "title": "Communication failure alarms per connected equipment and per gateway (offline detection)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Africell: Modbus / SNMP failure per equipment"
        },
        {
          "id": "core.audit",
          "title": "Full audit trail (users, gateways, northbound)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "core.multitenant",
          "title": "Multi tenant RBAC (operator, site group, read only NOC roles)",
          "priority": "high",
          "status": "done",
          "parity": "NetEco, Galooli",
          "done": "2026-09-27",
          "evidence": "rms_members table, role viewer/operator/owner, tenant+site scope; verified: scoped operator sees only its tenant, denied out-of-scope and owner actions"
        },
        {
          "id": "core.reports",
          "title": "Scheduled reports (availability, fuel, energy, alarms) as PDF and CSV",
          "priority": "high",
          "status": "done",
          "parity": "All benchmarks",
          "done": "2026-09-27",
          "evidence": "reports.js: fleet/tenant/site PDF via pdfkit (GET /reports/report.pdf verified), scheduled email via report_schedules + mailAttachment; CSV already done"
        },
        {
          "id": "core.rules",
          "title": "Rule builder: cross point rules, time windows, dependencies (genset off while grid on)",
          "priority": "high",
          "status": "done",
          "parity": "ThingsBoard rule chains",
          "done": "2026-09-27"
        },
        {
          "id": "core.sla",
          "title": "SLA and MTTR tracking per alarm and per site",
          "priority": "normal",
          "status": "planned"
        },
        {
          "id": "core.ha",
          "title": "High availability: two core nodes, database replication, backups",
          "priority": "high",
          "status": "planned"
        }
      ]
    },
    {
      "id": "northbound",
      "title": "Northbound and notifications",
      "items": [
        {
          "id": "nb.rest",
          "title": "REST northbound API with scoped keys (sites, latest, history, alarms, ack)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder: open REST API to the NOC"
        },
        {
          "id": "nb.snmptrap",
          "title": "SNMP v2c traps to the NOC manager (raise, clear, escalate, gateway state)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder; Huawei NCE manager of managers"
        },
        {
          "id": "nb.webhooks",
          "title": "Signed webhooks for alarms, gateway state and control results",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "nb.email_sms",
          "title": "Email and SMS notifications with per severity routing and on call schedule",
          "priority": "critical",
          "status": "done",
          "parity": "Thunder: SMS and email",
          "done": "2026-09-27",
          "evidence": "admin/ fleet page + Core API (contacts, thresholds, commands with reason); email via rms@primerp.ai relay, SMS via SMS_HTTP_URL provider"
        },
        {
          "id": "nb.primerp",
          "title": "Alarm to task automation in Prime RP (work orders, chat rooms, mobile push)",
          "priority": "high",
          "status": "planned",
          "parity": "Unique to Prime"
        },
        {
          "id": "nb.snmpagent",
          "title": "SNMP agent (GET) and Modbus TCP server for legacy NOCs",
          "priority": "normal",
          "status": "planned",
          "parity": "Thunder: open SNMP / Modbus"
        },
        {
          "id": "nb.baiomc",
          "title": "Ingest BaiOMC / NMS SNMP traps as the single site pane (decision D2)",
          "priority": "high",
          "status": "in_progress",
          "parity": "Karim record action 2",
          "done": "2026-09-27"
        },
        {
          "id": "nb.templates",
          "title": "Branded HTML email templates for alarms and reports, with in-console preview",
          "priority": "normal",
          "status": "done",
          "done": "2026-09-28",
          "evidence": "templates.js + /api/v1/templates/preview"
        }
      ]
    },
    {
      "id": "analytics",
      "title": "Analytics and AI layer",
      "items": [
        {
          "id": "ai.fuel",
          "title": "Fuel analytics: consumption rate, refill reconciliation, siphon detection, days to empty",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "parity": "Thunder fuel line"
        },
        {
          "id": "ai.availability",
          "title": "Site and gateway availability from online / offline history",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "ai.genset",
          "title": "Genset dispatch optimisation (fuel, battery SOC, tariff, solar forecast)",
          "priority": "high",
          "status": "done",
          "parity": "Thunder AI genset dispatch",
          "done": "2026-09-27"
        },
        {
          "id": "ai.baselines",
          "title": "Self learning baselines and anomaly alarms per point",
          "priority": "high",
          "status": "done",
          "parity": "Thunder self learning baselines",
          "done": "2026-09-27"
        },
        {
          "id": "ai.predictive",
          "title": "Predictive maintenance (battery SOH trend, rectifier module failure, genset wear)",
          "priority": "high",
          "status": "done",
          "parity": "Thunder predictive maintenance",
          "done": "2026-09-27"
        },
        {
          "id": "ai.access",
          "title": "Access pattern recognition and unauthorised presence correlation with CCTV",
          "priority": "normal",
          "status": "planned",
          "parity": "Thunder"
        },
        {
          "id": "ai.energy",
          "title": "Energy balance per site (grid, genset, solar, battery) and cost per kWh",
          "priority": "high",
          "status": "done",
          "parity": "Galooli energy analytics",
          "done": "2026-09-27"
        }
      ]
    },
    {
      "id": "console",
      "title": "Console and operations",
      "items": [
        {
          "id": "ui.live",
          "title": "Console runs on live data (sites, snapshot, alarms, assets, batteries from Core)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "console Live mode (data-data-mode=live) via live-source.js + /api/v1 snapshot; release 20260927-rms-live"
        },
        {
          "id": "ui.enroll",
          "title": "Gateway enrollment UI: codes, install command, fleet view, agent versions",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "admin/ fleet page + Core API (contacts, thresholds, commands with reason); email via rms@primerp.ai relay, SMS via SMS_HTTP_URL provider"
        },
        {
          "id": "ui.control",
          "title": "Remote control UI with reason capture, two person rule option and result read back",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "admin/ fleet page + Core API (contacts, thresholds, commands with reason); email via rms@primerp.ai relay, SMS via SMS_HTTP_URL provider"
        },
        {
          "id": "ui.thresholds",
          "title": "Threshold editor per point with console override",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "admin/ fleet page + Core API (contacts, thresholds, commands with reason); email via rms@primerp.ai relay, SMS via SMS_HTTP_URL provider"
        },
        {
          "id": "ui.map",
          "title": "Fleet map with status, alarm heat and clustering (1,000 sites)",
          "priority": "high",
          "status": "done",
          "done": "2026-08-20",
          "evidence": "Leaflet fleet map in console"
        },
        {
          "id": "ui.mobile",
          "title": "Mobile app views (Prime app) for alarms and site status",
          "priority": "high",
          "status": "planned",
          "parity": "Galooli mobile"
        },
        {
          "id": "ui.cctv",
          "title": "Live camera view and alarm linked recordings in the console",
          "priority": "normal",
          "status": "done",
          "parity": "Thunder CCTV",
          "done": "2026-09-28"
        },
        {
          "id": "ui.roadmap",
          "title": "Roadmap and parity page with completion score",
          "priority": "normal",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "ui.guide",
          "title": "Setup guide for non-technical installers (step-by-step, in the console)",
          "priority": "high",
          "status": "done",
          "done": "2026-09-28",
          "evidence": "/guide/"
        }
      ]
    },
    {
      "id": "africell",
      "title": "Africell required points (89) coverage",
      "items": [
        {
          "id": "pts.grid",
          "title": "SNEL / grid: 10 points (voltage, frequency, sequence, currents, availability, phase loss, imbalance, kW, kWh, PF)",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "Modbus meter profile in examples/africell-site.yaml"
        },
        {
          "id": "pts.genset",
          "title": "Generator: 12 points incl. start and stop commands, mode, failed start, e-stop",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "DSE7420 profile"
        },
        {
          "id": "pts.ats",
          "title": "ATS / AMF: 5 points",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.battery",
          "title": "Lithium battery: 11 points incl. BMS on / off",
          "priority": "critical",
          "status": "in_progress",
          "evidence": "SOC, temperature via controller; full BMS needs CAN driver"
        },
        {
          "id": "pts.rectifier",
          "title": "Rectifier: 7 points incl. per module status",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.fuel",
          "title": "Fuel: 7 points incl. theft, refill, probe fault",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.env",
          "title": "Cabinet environment: 7 points",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.dc",
          "title": "DC system: 3 points",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.solar",
          "title": "Solar / MPPT: 7 points",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.security",
          "title": "Site security and access: 5 points",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.cctv",
          "title": "CCTV: 7 points (person detection, line crossing, NOC pop up)",
          "priority": "high",
          "status": "planned"
        },
        {
          "id": "pts.aviation",
          "title": "Aviation light: 2 points",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "pts.rms",
          "title": "RMS and communication health: 6 points",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        }
      ]
    },
    {
      "id": "security",
      "title": "Security, hosting and compliance",
      "items": [
        {
          "id": "sec.onprem",
          "title": "On premises hosting (Dubai) with data residency option per tenant",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27",
          "evidence": "app-01 compose, own Postgres"
        },
        {
          "id": "sec.rbac",
          "title": "Administrator gating via Prime identity, per action audit",
          "priority": "critical",
          "status": "done",
          "done": "2026-09-27"
        },
        {
          "id": "sec.control",
          "title": "Control safety: reason required, expiry, gateway read back, interlock rules",
          "priority": "critical",
          "status": "in_progress"
        },
        {
          "id": "sec.pentest",
          "title": "External penetration test and hardening report",
          "priority": "high",
          "status": "planned"
        },
        {
          "id": "sec.backup",
          "title": "Nightly encrypted backups with restore drill",
          "priority": "high",
          "status": "done",
          "done": "2026-09-27"
        }
      ]
    }
  ]
}