digraph RemoteLocationControl {
    graph [
        label="Remote Location Control - Prepaid Surplus Power Distribution",
        labelloc="t",
        fontsize=20,
        fontname="DejaVu Sans",
        rankdir=LR,
        splines=polyline,
        nodesep=0.7,
        ranksep=1.0
    ];

    node [
        shape=box,
        style="rounded,filled",
        fontname="DejaVu Sans",
        fontsize=11,
        fillcolor="#ffffff",
        color="#444444"
    ];

    edge [
        fontname="DejaVu Sans",
        fontsize=10,
        color="#444444",
        arrowsize=0.8
    ];

    subgraph cluster_central_site {
        label="Central Site / Star Center";
        color="#4897D2";
        penwidth=2;
        style="rounded";

        victron [label="Victron Installation
central power system", fillcolor="#EAF4FB"];
        surplus [label="Available / Surplus Power
managed export to clients", fillcolor="#F5FBFF"];
        prepaid_controller [label="Prepaid Logic / Billing
credit, limits, lockout rules", fillcolor="#FFF7E6"];
        lora_gateway [label="LoRa Gateway / Coordinator
remote cabinet communication", fillcolor="#EEF9F0"];
    }

    subgraph cluster_client_template {
        label="Remote Client Cabinet Template (Folio 2)";
        color="#777777";
        style="rounded,dashed";

        terminals [label="WAGO Terminals
AC IN / AC OUT / PE", fillcolor="#F7F7F7"];
        em50 [label="U1 - Shelly Pro EM-50
measures client consumption", fillcolor="#FFFFFF"];
        lora_addon [label="U2 - Shelly Pro LoRa Add-on
attached to EM-50", fillcolor="#EEF9F0"];
        procb [label="QF2 - Shelly Pro 1CB C
remote power-off device", fillcolor="#FFECEC"];
        ct [label="T1 - CT50A
current transformer", fillcolor="#F7F7F7"];
        client_load [label="Client Loads / Remote Location
prepaid branch", fillcolor="#FFFDF2"];
    }

    subgraph cluster_other_clients {
        label="Other Remote Client Cabinets";
        color="#AAAAAA";
        style="rounded,dotted";

        client_b [label="Client Cabinet B
EM-50 + LoRa + ProCB", fillcolor="#F9F9F9"];
        client_c [label="Client Cabinet C
EM-50 + LoRa + ProCB", fillcolor="#F9F9F9"];
        client_n [label="Client Cabinet N
repeatable branch", fillcolor="#F9F9F9"];
    }

    victron -> surplus [label="power source / surplus energy"];
    surplus -> terminals [label="AC branch feed"];
    terminals -> procb [label="protected live path"];
    procb -> client_load [label="AC OUT: connected when allowed"];
    terminals -> client_load [label="N / PE distribution", style=dashed, arrowhead=none];

    ct -> em50 [label="measurement signal"];
    client_load -> ct [label="load current passes through CT", dir=back];

    em50 -> procb [label="local Ethernet command
OFF when prepaid limit exceeded", color="#D62728", penwidth=2];
    procb -> em50 [label="state / breaker status
Ethernet", style=dashed];

    lora_addon -> em50 [label="addon connection", dir=both];
    lora_gateway -> lora_addon [label="LoRa telemetry / commands", color="#2CA02C", penwidth=2, dir=both];

    em50 -> prepaid_controller [label="energy usage / credit consumption
via LoRa path", style=dashed];
    prepaid_controller -> em50 [label="allowed value / disconnect policy
via LoRa path", style=dashed];

    surplus -> client_b [label="star branch power"];
    surplus -> client_c [label="star branch power"];
    surplus -> client_n [label="star branch power"];

    lora_gateway -> client_b [label="LoRa", color="#2CA02C", style=dashed, dir=both];
    lora_gateway -> client_c [label="LoRa", color="#2CA02C", style=dashed, dir=both];
    lora_gateway -> client_n [label="LoRa", color="#2CA02C", style=dashed, dir=both];

    prepaid_controller -> procb [label="business rule result:
paid credit OK = ON allowed
credit exceeded = OFF", color="#D62728", style=dotted];
}
