---
module: platform.module-map
title: Module Map (what each app does + its data source)
tab: Overview
order: 60
audience: dev
---

> **DRAFT · internal** (2026-07-01). Ports/routes from CLAUDE.md; expand + verify per module.
> When a "tab is empty / data missing" report comes in, start from this map: know the intended
> behaviour and the data source, then diagnose the **product**, don't investigate whether data
> "happens to exist."

| App (URL) | Purpose | Backend / data source | Gotchas |
|---|---|---|---|
| **fleet** (fleet.bcos.*) | Deploy hotfix/software/agent to ATMs; task execution | fleet backend :8097 — **executor only**, publishes to Kafka | history is in the **devices** record store, not fleet; `/fleet/tasks` empty by design |
| **devices** (devices.bcos.*) | ATM records, properties, config changes, per-device task history | devices backend (frontend calls legacy `/incident/...` route) | `/api/atms/{id}/fleet-tasks` is the device task record store; publishes `hiveops.device.events` |
| **incident** | Incident create/resolve/auto-close; journal-event ingest | incident backend :8081 | 32-issue auto-close/resolve cluster = few root causes |
| **transactions** | Transaction browser, customer journey | reads journal/incident data | — |
| **recon** | Cash reconciliation | recon backend :8091; `device_summary` mirror | LACA NCR-8800 parser specifics |
| **reports** | Report builder, scheduling, CSV | reports backend :8088; `device_summary` mirror | — |
| **analytics** | Fleet dashboard analytics | analytics backend :8089 (stateless aggregation) | — |
| **mgmt / msp** | Institutions, users, allocations, `app_modules` | mgmt backend :8080 (`hiveiq_mgmt`) | menu items can be `app_modules`-driven (DB), not hardcoded |
| **journal** | Journal file storage + parsing | journal :8087; per-institution workers | `DB_URL` (full JDBC), not split host/port |
| **guide** (this app) | In-app help; markdown → API → tabbed slide-out | guide backend :8099 — **markdown files**, no DB | route needs `hiveiq-guide-backend:8099` (port!) |
| **agent-proxy** | Agent-facing gateway (auth, fingerprints, proxy) | :8093/8015 | owns agent paths natively |
| **ai / adoons** | NL assistant (branded "Adoons" externally) | Spring AI; incident→ai Kafka | never say "AI" externally |
| **vault / claims / aria / recon** | CIT visits / loss recovery / threat intel | own backends | see per-project memory |

## SW update flow (a worked "empty tab" case)
SW updates reach an ATM via (1) fleet SOFTWARE/SOFTWARE_INSTALL task, (2) QDS, or (3) agent
self-update. The device SW-deploy history reads the **devices record store**. "No info in the SW
Update tab" after a real fleet-task update ⇒ the tab is reading the wrong source or the record
isn't captured — a **product bug to fix**, not "no data".
