@startuml participant Agent as agent participant "MQTT Broker (raw\ntopic)" as mqtt1 participant "Edge Service" as edge participant "MQTT\nBroker (processed\ntopic)" as mqtt2 participant "Hub Service" as hub participant "Redis" as redis participant "Store API" as store participant "PostgreSQL" as db participant "MapView Client" as mapview agent -> mqtt1 : Publish raw\ntelemetry mqtt1 -> edge : Deliver raw\nmessage edge -> edge : Validate\nAgentData edge -> edge : Process\ntelemetry edge -> mqtt2 : Publish\nprocessed data mqtt2 -> hub : Deliver processed\nmessage hub -> hub : Validate\nProcessedAgentData hub -> redis : LPUSH to buffer hub -> redis : LPOP batch item redis -> hub : Return item hub -> store : POST batch store -> db : INSERT records db --> store : Return created\nrecords store -> mapview : WebSocket push mapview -> mapview : Sort by timestamp mapview -> mapview : Update vehicle\nmarker mapview -> mapview : Add pothole/bump\nmarker store --> hub : Success response @enduml