digraph MercadoPagoShunt { rankdir=LR; compound=true; fontname="Helvetica"; node [fontname="Helvetica", fontsize=11, shape=box, style="rounded,filled"]; edge [fontname="Helvetica", fontsize=10]; labelloc="t"; label="MercadoPago Shunt - Mock Payment Flow"; fontsize=16; // Client App subgraph cluster_client { label="Managed Room (e.g., AMAR)"; style=filled; color="#E8F5E9"; fillcolor="#E8F5E9"; backend [label="Backend\n(Django/FastAPI)", fillcolor="#C8E6C9"]; } // Shunt subgraph cluster_shunt { label="Shunt (artery/shunts/mercadopago)"; style=filled; color="#FFF3E0"; fillcolor="#FFF3E0"; mock_api [label="Mock API\n/payments\n/preferences", fillcolor="#FFCC80"]; config_ui [label="Config UI\n(set responses)", fillcolor="#FFB74D"]; state [label="State\n(pending payments)", fillcolor="#FFA726"]; } // Fake responses subgraph cluster_responses { label="Configurable Responses"; style=dashed; color=gray; approved [label="approved", fillcolor="#C8E6C9"]; pending [label="pending", fillcolor="#FFF9C4"]; rejected [label="rejected", fillcolor="#FFCDD2"]; } // Real (bypassed) subgraph cluster_real { label="Real MercadoPago (bypassed)"; style=dashed; color="#BDBDBD"; real_api [label="api.mercadopago.com", fillcolor="#E0E0E0", fontcolor="#9E9E9E"]; } // Flow backend -> mock_api [label="POST /payments"]; mock_api -> state [label="store"]; config_ui -> state [label="configure"]; state -> approved [style=dashed]; state -> pending [style=dashed]; state -> rejected [style=dashed]; mock_api -> backend [label="webhook callback", style=dashed]; }