Files
dashfront/automat-graph.dot
2026-10-13 17:19:33 +02:00

162 lines
132 KiB
Plaintext

digraph automats {
graph [rankdir=TB, splines=spline, overlap=false, bgcolor="#1e2430",
nodesep=0.95, ranksep=1.0, pad=0.5, fontname="Helvetica",
compound=true, mclimit=1.0];
node [shape=plaintext, fontname="Helvetica"];
edge [fontname="Helvetica", fontsize=9, penwidth=1.4, arrowsize=0.7];
subgraph cluster_session_realtime {
label="Session & Real-Time Hub"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
authAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="4" BORDER="1"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>authAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Session &amp; Multi-Tenant Gateway</FONT></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>user: AuthUser</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Current user &amp; company</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">'anon' | 'authed' | 'loading'</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>bootstrapSession()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Restore or fetch session</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_auth_switchCompany" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>switchCompany(id)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Multi-tenant switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>logout()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Clear session cookie</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectSelectedCompanyId()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Tenant selector</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_auth_status" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#382414" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fb923c" POINT-SIZE="8"><B>HOOK</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>auth/sessionEstablished</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Session ready lifecycle</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_auth_user" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#382414" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fb923c" POINT-SIZE="8"><B>HOOK</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>auth/companyChanged</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company change signal</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/auth/session</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Cookie session check</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
sseAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>sseAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Single Persistent SSE Connection</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">'connected' | 'error'</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>clientId (cid)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Tab-scoped UUID in session</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reconnect()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Cycle on company switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>on(event, handler)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Register signal listener</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>watchArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Attach article-&lt;sku&gt;</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>invalidateArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Silent cache refresh</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_sse_events" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>category / articles</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Catalog mutation events</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>order / shipment</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fulfillment events</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/events</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Persistent stream</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_catalog_products {
label="Catalog &amp; Products"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
categoryAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in3" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in4" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in5" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in6" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="7" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>categoryAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Hierarchical Category Tree</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_cat_categories" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>categories: Map</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">ID -&gt; Category Node Map</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>rootCategoryId</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company root node ID</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articleCount</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Total parent items</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_cat_loadTree" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>loadTree()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch tree &amp; warm views</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>createCategory()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Insert child node</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>moveCategory()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Parent reparenting</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>deleteCategory()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Prune subtree</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>getCategoryBreadcrumbs()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Hierarchical path trace</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/category</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Recursive tree load</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
categoryViewAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>categoryViewAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">KeyedAutomat (Slug Path)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>views: Map&lt;slug, Data&gt;</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Articles &amp; direct children</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>loadAllCategoryViews()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Prewarm all tree slugs</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reloadLoadedCategoryViews()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Refresh cached views</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>invalidateAllCategoryViews()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Clear on SSE signal</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_catview_collect" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>collectLoadedCategoryViewData()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Extract union data</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>getOrCreateCategoryAutomat()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Per-slug reactive store</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/category/:id/articles</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Category article batch</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
artikelAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in3" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in4" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="5" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>artikelAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">In-Memory Article Record Cache</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_art_set" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articles: Map&lt;sku, Object&gt;</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated SKU cache</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>loadArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch or cached promise</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reloadArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Silent background sync</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_art_setName" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setArticleName(sku, name)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Optimistic rename</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>clearArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Evict SKU from cache</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>getArticle(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Sync constructor read</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>createArticleSelector(sku)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fine-grained selector</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/article/:sku</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Full article document</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
articleDetailAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>articleDetailAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">KeyedAutomat (SKU)</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_artdet_hist" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articleHistory: Map&lt;sku&gt;</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Change history log</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articleSupplier: Map&lt;sku&gt;</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Assigned supplier list</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articleHistoryAutomat.load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch SKU audit trail</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>articleSupplierAutomat.load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch supplier catalog</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/article/:sku/history</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Audit change entries</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/article/:sku/supplier</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Vendor links &amp; prices</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
brandAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>brandAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Catalog Brands &amp; Makers</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>brands: Brand[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Decoupled brand catalog</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>filteredBrands: Brand[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Filtered search slice</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load(silent)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated list fetch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>create() / rename()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Brand mutations</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>addImage() / deleteImage()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Brand logo AVIF image</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/brand</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Paginated brand records</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>brand</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">SSE signal with sender tab</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
unitAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>unitAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Units of Measure (UoM)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>units: Unit[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Allowed SI &amp; sales units</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status: 'idle'|'ready'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Load lifecycle state</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch localized units</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>upsert(body)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Create or update unit</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>delete(id)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Remove unused unit</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/unit</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company unit directory</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_search_indexing {
label="Search &amp; Indexing"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
articleIndexAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="3" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>articleIndexAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Derived Client Search Index</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_idx_items" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: ArticleIndexRecord[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">De-duplicated article union</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status: 'ready'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Index lifecycle flag</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>buildArticleIndex()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Derive from category views</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setArticleIndexName()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Patch on rename</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Re-derive from views</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectArticleIndexItems()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fast record projection</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>ensureLoaded()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Await warm views</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
articleSearchAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>articleSearchAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">In-Memory FlexSearch Engine</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>target: string</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active search query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>filter: string</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active category filter</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>result: ArticleSearchResult</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Facets, recordset, count</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>search(target, filter)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Synchronous indexed query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectSearchResult()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reactive search outcome</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_properties_attributes {
label="Properties &amp; Attributes"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
propertyAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>propertyAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Custom Metadata Properties</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>properties: PropertyName[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Sorted company properties</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch property definitions</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>createProperty()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Add new property definition</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>updateProperty()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Edit title &amp; sort</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/propertyname</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company properties</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>propertyname</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Real-time property signal</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
attributeAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>attributeAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Product Attributes &amp; Discrete Values</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>attributes: AttributeName[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Attributes with sorted values</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch attribute definitions</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>createAttribute()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Create attribute group</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>addValue() / deleteValue()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Discrete value options</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/attributename</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Attributes &amp; values</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>attributename</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Real-time attribute signal</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_purchasing_logistics {
label="Suppliers &amp; Deliveries"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
supplierAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="3" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>supplierAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Supplier Directory &amp; Catalogs</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>suppliers: Supplier[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active vendor list</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status: 'ready'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Load lifecycle state</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated fetch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Silent background sync</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/supplier</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Vendor records</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>supplier</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Real-time supplier signal</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
deliveryAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>deliveryAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Deliveries)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Delivery[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company delivery receipts</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>status: 'ready'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">List lifecycle state</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated fetch &amp; sync</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reset()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Clear on session switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/delivery</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Inbound delivery log</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
deliveryEditorAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>deliveryEditorAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Inbound Receipt &amp; OCR Machine</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_deled_lines" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>lines: DeliveryLine[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Uncommitted draft lines</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_deled_supplier" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>deliveryEntity</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Selected supplier ID</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>attachments: File[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Invoice PDFs &amp; OCR results</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>draftCount: number</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Uncommitted lines for badge</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>addLine() / updateLine()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Interactive item editing</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_deled_commit" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>commitDelivery()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Persist goods receipt</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>buildSupplierArticlesMap()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Auto-match SKU/EAN</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>POST /api/delivery</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Create goods receipt</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_sales_crm {
label="Sales &amp; CRM"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
quoteAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>quoteAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Quotes)</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_quote_items" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Quote[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Sales quotes / Angebote</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated fetch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reset()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reset on logout</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/quote</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company quote list</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
orderAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="3" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>orderAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Chunk-Paginated Order Engine</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_order_items" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Order[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Sales orders &amp; lines</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>total: number</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Unfiltered order count</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>onlyUnpaid / onlyUndelivered</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fulfillment filters</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>loadChunk(index)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Chunk size 50 prefetch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Silent orders re-fetch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectOrders() / selectTotal()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Filter-applied slice</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/order</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Paged order stream</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>order / shipment</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fulfillment mutations</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
entityAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>entityAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Entities)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Entity[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Customers &amp; partners</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Customer directory load</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reset()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reset on session switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/entity</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Directory records</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
customergroupAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>customergroupAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Groups)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Customergroup[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Pricing discount tiers</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Discount group load</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/customergroup</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Pricing tiers</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_inventory_storage {
label="Inventory &amp; Warehousing"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
warehouseAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>warehouseAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Warehouse Locations &amp; Stock</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>warehouses: Warehouse[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Storage areas &amp; bins</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>filteredWarehouses</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Filter search slice</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Deduplicated sync</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setFilter(query)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Local filter query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/warehouse</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Warehouse listings</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>warehouse</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Real-time stock movement</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_finance_config {
label="Company &amp; Finance"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
companyAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>companyAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Active Company Configuration</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_comp_curr" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>current: Company</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Tax rates &amp; ISO language</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch tenant settings</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectCompanyTaxrate()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Standard tax rate</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_comp_root" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectCompanyRootCategoryId()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Root category pointer</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectCompanyName()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company legal name</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/company/:id</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Legal &amp; tax profile</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
accountAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>accountAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Accounts)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: Account[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Bank &amp; payment ledgers</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Payment accounts load</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/account</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Chart of accounts</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
numberAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>numberAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createListAutomat (Sequences)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>items: NumberSeq[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Invoice/receipt counters</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load() / reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Number series sync</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/number</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Document counters</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_hardware_pos {
label="POS &amp; Hardware"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
posterminalAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>posterminalAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">POS Terminals &amp; Gating</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_pos_term" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>terminals: Posterminal[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Hardware terminals</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>load()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Fetch POS registers</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>create() / delete()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Terminal registrations</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>toggleCategory()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Gated category filters</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectPosterminals()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active registers</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/posterminal</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Terminal device configs</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_ai_workspace {
label="AI Assistant &amp; Workspace"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
chatAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="3" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>chatAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">AI Assistant Drawer &amp; SSE</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>isOpen: boolean</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Docked chat drawer toggle</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>conversations: []</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Conversation sessions</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_chat_msg" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>messages: ModelMessage[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Live message transcript</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_chat_sse" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>sseStatus: 'connected'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Token streaming stream</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>sendMessage(text)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Prompt model with tools</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>answerAskUser()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Interactive tool modal</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_chat_tools" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="8"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>userEnv / routeTools</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Client navigation tool</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>POST /api/modelconversation</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">AI conversation session</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>modelconversation/events</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Live token stream</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
vfsAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in2" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="3" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>vfsAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Virtual Filesystem Explorer</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>files: VfsFile[]</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company VFS workspace</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectedFileName</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Current active file</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>fileContent / isDirty</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Editor buffer &amp; diff</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>selectFile() / saveFile()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Applet editor buffer</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>uploadFiles() / deleteFile()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">File manipulations</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/vfs</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">VFS directory index</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="8"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>vfs</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">VFS mutation signal</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_audit_grids {
label="Audit &amp; Virtual Grids"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
articleHistoryGridAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>articleHistoryGridAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createGridAutomat (Article)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>rows: [] / totalRows</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Block size 50 virtual rows</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>fetchRows(viewport)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Infinite scroll query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reload on company switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/article/history</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Infinite audit window</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
globalHistoryGridAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="1" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>globalHistoryGridAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">createGridAutomat (Global)</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>rows: [] / totalRows</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Block size 50 virtual rows</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>fetchRows(viewport)</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Infinite scroll query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>reload()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reload on company switch</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="8"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>GET /api/globalhistory</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Company global audit</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
}
subgraph cluster_system_ui {
label="UI, Settings &amp; System"; labeljust="l"; fontsize=15;
style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f";
fontcolor="#e2e8f0"; margin=14;
navigationAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="1" BORDER="1"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD PORT="in0" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD><TD PORT="in1" BGCOLOR="#33415c" BORDER="0" WIDTH="10" HEIGHT="4" CELLPADDING="0"></TD></TR><TR><TD COLSPAN="2" ALIGN="CENTER" CELLPADDING="3"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>navigationAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Cross-Section Navigation Memory</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_nav_delpath" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>lastDeliveryPath</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active receipt subpath</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_nav_sku" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>lastArticleSku</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active SKU selection</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_nav_catslug" COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>lastCategorySlug / Path</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active category tree node</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>lastSearchTerm / Path</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Preserved search query</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setLastDeliveryPath()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Restore on sidebar click</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setLastArticleSku()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Restore SKU on section click</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>clearNavigation()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Reset on company switch</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
userSettingsAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="4" BORDER="1"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>userSettingsAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">IndexedDB User Preferences</FONT></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>viewerPosition: 'top'|'right'</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Editor docking location</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_usr_drawer" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>chatDrawerWidth: 460</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">AI drawer pixel width</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setViewerPosition()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Persist docking</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>setChatDrawerWidth()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Persist drawer width</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#382414" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fb923c" POINT-SIZE="8"><B>HOOK</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>persist: true</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Survives page reloads</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
helpAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="4" BORDER="1"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>helpAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">IndexedDB Contextual Help</FONT></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>enabled: boolean</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Interactive help badges</FONT></TD></TR></TABLE></TD></TR><TR><TD PORT="p_help_active" COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>activeHelpId: string|null</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Active popper ID</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>toggle() / setEnabled()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Toggle badge mode</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>openPopper() / closePopper()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Single active popper</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#382414" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#fb923c" POINT-SIZE="8"><B>HOOK</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>persist: true</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Survives page reloads</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
pwaAutomat [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f"><TR><TD COLSPAN="3" BGCOLOR="#33415c" ALIGN="CENTER" CELLPADDING="4" BORDER="1"><FONT COLOR="#e2e8f0" POINT-SIZE="12"><B>pwaAutomat</B></FONT><BR/><FONT COLOR="#8b95a7" POINT-SIZE="9">Service Worker &amp; Offline Lifecycle</FONT></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>needRefresh: boolean</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">New SW release pending</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>offlineReady: boolean</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Offline assets cached</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="8"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>dialogOpen / updating</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Prompt modal state</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#272e3d" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>applyUpdate()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Skip waiting &amp; reload</FONT></TD></TR></TABLE></TD></TR><TR><TD COLSPAN="3" BGCOLOR="#2a3242" BORDER="1" CELLPADDING="0"><TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" FIXEDSIZE="FALSE"><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="3" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="8"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="10"><B>openDialog() / closeDialog()</B></FONT></TD><TD ALIGN="RIGHT" CELLPADDING="4"><FONT COLOR="#8b95a7" POINT-SIZE="8">Modal controls</FONT></TD></TR></TABLE></TD></TR></TABLE>>];
Legend [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4" COLOR="#3f4c5f" BGCOLOR="#2a3242"><TR><TD COLSPAN="2" BGCOLOR="#33415c" ALIGN="CENTER"><FONT COLOR="#e2e8f0" POINT-SIZE="11"><B>Automat Graph Legend</B></FONT></TD></TR><TR><TD BGCOLOR="#2b1a42" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#c084fc" POINT-SIZE="9"><B>STATE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Reactive store state property</FONT></TD></TR><TR><TD BGCOLOR="#143826" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#4ade80" POINT-SIZE="9"><B>ACTION</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">State mutation action</FONT></TD></TR><TR><TD BGCOLOR="#182b40" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#38bdf8" POINT-SIZE="9"><B>SELECT</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Reactive PureComponent selector</FONT></TD></TR><TR><TD BGCOLOR="#3b2c12" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#fbbf24" POINT-SIZE="9"><B>API</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Backend REST/Fetch endpoint</FONT></TD></TR><TR><TD BGCOLOR="#3a181e" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#f87171" POINT-SIZE="9"><B>SSE</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Inbound Server-Sent Event trigger</FONT></TD></TR><TR><TD BGCOLOR="#382414" ALIGN="CENTER" CELLPADDING="2" WIDTH="48"><FONT COLOR="#fb923c" POINT-SIZE="9"><B>HOOK</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Auth / persistence lifecycle hook</FONT></TD></TR><TR><TD ALIGN="CENTER" CELLPADDING="2"><FONT COLOR="#e2e8f0"><B>in#</B></FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Inbound arrival port on Automat header</FONT></TD></TR><TR><TD ALIGN="CENTER" CELLPADDING="2"><FONT COLOR="#5aa7ff">&#9642;&#8212;&#9654;</FONT></TD><TD ALIGN="LEFT" CELLPADDING="4"><FONT COLOR="#d8dee9" POINT-SIZE="9">Reactive dataflow / upstream trigger</FONT></TD></TR></TABLE>>];
}
authAutomat:p_auth_user:e -> sseAutomat:in0:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="authAutomat → sseAutomat (bind session &amp; cid)", label=" bind session &amp; cid ", constraint=false, weight=1];
authAutomat:p_auth_switchCompany:w -> companyAutomat:in0:n [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="authAutomat → companyAutomat (load company profile)", label=" load company profile ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> categoryAutomat:in5:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="authAutomat → categoryAutomat (sync tree on authed)", label=" sync tree on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> brandAutomat:in0:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="authAutomat → brandAutomat (sync brands on authed)", label=" sync brands on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> unitAutomat:in0:n [color="#c79bff", fontcolor="#c79bff", tooltip="authAutomat → unitAutomat (sync units on authed)", label=" sync units on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> attributeAutomat:in0:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="authAutomat → attributeAutomat (sync attributes on authed)", label=" sync attributes on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> propertyAutomat:in0:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="authAutomat → propertyAutomat (sync properties on authed)", label=" sync properties on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> supplierAutomat:in1:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="authAutomat → supplierAutomat (sync suppliers on authed)", label=" sync suppliers on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> warehouseAutomat:in0:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="authAutomat → warehouseAutomat (sync warehouses on authed)", label=" sync warehouses on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> posterminalAutomat:in1:n [color="#58d18a", fontcolor="#58d18a", tooltip="authAutomat → posterminalAutomat (sync terminals on authed)", label=" sync terminals on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> deliveryAutomat:in1:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="authAutomat → deliveryAutomat (sync deliveries on authed)", label=" sync deliveries on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> quoteAutomat:in0:n [color="#a98cff", fontcolor="#a98cff", tooltip="authAutomat → quoteAutomat (sync quotes on authed)", label=" sync quotes on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> orderAutomat:in0:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="authAutomat → orderAutomat (sync orders on authed)", label=" sync orders on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> entityAutomat:in0:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="authAutomat → entityAutomat (sync entities on authed)", label=" sync entities on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> customergroupAutomat:in1:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="authAutomat → customergroupAutomat (sync customer groups)", label=" sync customer groups ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> numberAutomat:in0:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="authAutomat → numberAutomat (sync number series)", label=" sync number series ", constraint=false, weight=1];
authAutomat:p_auth_status:w -> accountAutomat:in0:n [color="#56c8c8", fontcolor="#56c8c8", tooltip="authAutomat → accountAutomat (sync payment accounts)", label=" sync payment accounts ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> chatAutomat:in1:n [color="#ff5f9e", fontcolor="#ff5f9e", tooltip="authAutomat → chatAutomat (auth chat &amp; reload)", label=" auth chat &amp; reload ", weight=3];
authAutomat:p_auth_status:e -> vfsAutomat:in0:n [color="#ffb25a", fontcolor="#ffb25a", tooltip="authAutomat → vfsAutomat (load company vfs)", label=" load company vfs ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> articleHistoryGridAutomat:in0:n [color="#66b3ff", fontcolor="#66b3ff", tooltip="authAutomat → articleHistoryGridAutomat (reload history on authed)", label=" reload history on authed ", constraint=false, weight=1];
authAutomat:p_auth_status:e -> globalHistoryGridAutomat:in0:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="authAutomat → globalHistoryGridAutomat (reload audit on authed)", label=" reload audit on authed ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> categoryAutomat:in6:n [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="sseAutomat → categoryAutomat ('category' sse trigger)", label=" 'category' sse trigger ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> categoryViewAutomat:in1:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="sseAutomat → categoryViewAutomat (invalidate views on sse)", label=" invalidate views on sse ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> articleIndexAutomat:in2:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="sseAutomat → articleIndexAutomat ('articles' sse trigger)", label=" 'articles' sse trigger ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> artikelAutomat:in4:n [color="#c79bff", fontcolor="#c79bff", tooltip="sseAutomat → artikelAutomat ('article-&lt;sku&gt;' sse reload)", label=" 'article-&lt;sku&gt;' sse reload ", weight=3];
sseAutomat:p_sse_events:w -> articleDetailAutomat:in0:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="sseAutomat → articleDetailAutomat (invalidateArticle(sku))", label=" invalidateArticle(sku) ", constraint=false, weight=1];
sseAutomat:p_sse_events:e -> warehouseAutomat:in1:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="sseAutomat → warehouseAutomat ('warehouse' sse trigger)", label=" 'warehouse' sse trigger ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> supplierAutomat:in2:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="sseAutomat → supplierAutomat ('supplier' sse trigger)", label=" 'supplier' sse trigger ", constraint=false, weight=1];
sseAutomat:p_sse_events:w -> brandAutomat:in1:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="sseAutomat → brandAutomat ('brand' sse trigger)", label=" 'brand' sse trigger ", constraint=false, weight=1];
sseAutomat:p_sse_events:e -> attributeAutomat:in1:n [color="#58d18a", fontcolor="#58d18a", tooltip="sseAutomat → attributeAutomat ('attributename' sse)", label=" 'attributename' sse ", constraint=false, weight=1];
sseAutomat:p_sse_events:e -> propertyAutomat:in1:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="sseAutomat → propertyAutomat ('propertyname' sse)", label=" 'propertyname' sse ", constraint=false, weight=1];
sseAutomat:p_sse_events:e -> orderAutomat:in1:n [color="#a98cff", fontcolor="#a98cff", tooltip="sseAutomat → orderAutomat ('order'/'shipment' sse)", label=" 'order'/'shipment' sse ", constraint=false, weight=1];
sseAutomat:p_sse_events:e -> vfsAutomat:in2:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="sseAutomat → vfsAutomat ('vfs' sse mutation)", label=" 'vfs' sse mutation ", constraint=false, weight=1];
companyAutomat:p_comp_root:e -> categoryAutomat:in1:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="companyAutomat → categoryAutomat (rootCategoryId)", label=" rootCategoryId ", constraint=false, weight=1];
categoryAutomat:p_cat_loadTree:e -> categoryViewAutomat:in0:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="categoryAutomat → categoryViewAutomat (attachTree &amp; warm slugs)", label=" attachTree &amp; warm slugs ", weight=3];
categoryViewAutomat:p_catview_collect:e -> articleIndexAutomat:in1:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="categoryViewAutomat → articleIndexAutomat (derived union index)", label=" derived union index ", weight=3];
articleIndexAutomat:p_idx_items:e -> articleSearchAutomat:in1:n [color="#56c8c8", fontcolor="#56c8c8", tooltip="articleIndexAutomat → articleSearchAutomat (query index items)", label=" query index items ", weight=3];
categoryAutomat:p_cat_categories:e -> articleSearchAutomat:in0:n [color="#ff5f9e", fontcolor="#ff5f9e", tooltip="categoryAutomat → articleSearchAutomat (categoryFacets)", label=" categoryFacets ", constraint=false, weight=1];
artikelAutomat:p_art_setName:e -> articleIndexAutomat:in0:n [color="#ffb25a", fontcolor="#ffb25a", tooltip="artikelAutomat → articleIndexAutomat (setArticleIndexName (optimistic))", label=" setArticleIndexName (optimistic) ", constraint=false, weight=1];
artikelAutomat:p_art_set:e -> categoryAutomat:in3:n [color="#66b3ff", fontcolor="#66b3ff", tooltip="artikelAutomat → categoryAutomat (articleCount updates)", label=" articleCount updates ", weight=3];
articleDetailAutomat:p_artdet_hist:e -> artikelAutomat:in2:n [color="#5aa7ff", fontcolor="#5aa7ff", tooltip="articleDetailAutomat → artikelAutomat (watch SKU details)", label=" watch SKU details ", weight=3];
deliveryEditorAutomat:p_deled_supplier:w -> supplierAutomat:in0:n [color="#6bdf9a", fontcolor="#6bdf9a", tooltip="deliveryEditorAutomat → supplierAutomat (match vendor catalog)", label=" match vendor catalog ", constraint=false, weight=1];
deliveryEditorAutomat:p_deled_lines:e -> artikelAutomat:in1:n [color="#f5c15c", fontcolor="#f5c15c", tooltip="deliveryEditorAutomat → artikelAutomat (lookup SKU &amp; pack units)", label=" lookup SKU &amp; pack units ", constraint=false, weight=1];
deliveryEditorAutomat:p_deled_commit:e -> deliveryAutomat:in0:n [color="#ff7fc2", fontcolor="#ff7fc2", tooltip="deliveryEditorAutomat → deliveryAutomat (commit delivery receipt)", label=" commit delivery receipt ", weight=3];
quoteAutomat:p_quote_items:w -> orderAutomat:in2:n [color="#c79bff", fontcolor="#c79bff", tooltip="quoteAutomat → orderAutomat (convert quote to order)", label=" convert quote to order ", weight=3];
orderAutomat:p_order_items:e -> entityAutomat:in1:n [color="#5cd6d6", fontcolor="#5cd6d6", tooltip="orderAutomat → entityAutomat (customer lookup)", label=" customer lookup ", weight=3];
companyAutomat:p_comp_curr:e -> customergroupAutomat:in0:n [color="#ff9f5a", fontcolor="#ff9f5a", tooltip="companyAutomat → customergroupAutomat (poscustomergroup)", label=" poscustomergroup ", constraint=false, weight=1];
posterminalAutomat:p_pos_term:e -> categoryAutomat:in2:n [color="#8f95ff", fontcolor="#8f95ff", tooltip="posterminalAutomat → categoryAutomat (filter enabled roots)", label=" filter enabled roots ", weight=3];
companyAutomat:p_comp_curr:e -> posterminalAutomat:in0:n [color="#ff6b6b", fontcolor="#ff6b6b", tooltip="companyAutomat → posterminalAutomat (company context)", label=" company context ", weight=3];
chatAutomat:p_chat_msg:e -> vfsAutomat:in1:n [color="#58d18a", fontcolor="#58d18a", tooltip="chatAutomat → vfsAutomat (inspect / edit applets)", label=" inspect / edit applets ", constraint=false, weight=1];
chatAutomat:p_chat_tools:w -> navigationAutomat:in1:n [color="#4fc4e8", fontcolor="#4fc4e8", tooltip="chatAutomat → navigationAutomat (set_user_route tool)", label=" set_user_route tool ", constraint=false, weight=1];
chatAutomat:p_chat_sse:e -> sseAutomat:in1:n [color="#a98cff", fontcolor="#a98cff", tooltip="chatAutomat → sseAutomat (getSseClientId())", label=" getSseClientId() ", weight=3];
navigationAutomat:p_nav_sku:e -> artikelAutomat:in0:n [color="#ff8f66", fontcolor="#ff8f66", tooltip="navigationAutomat → artikelAutomat (restore last SKU)", label=" restore last SKU ", constraint=false, weight=1];
navigationAutomat:p_nav_catslug:e -> categoryAutomat:in0:n [color="#4ecb8f", fontcolor="#4ecb8f", tooltip="navigationAutomat → categoryAutomat (restore last category)", label=" restore last category ", constraint=false, weight=1];
navigationAutomat:p_nav_delpath:e -> deliveryEditorAutomat:in0:n [color="#ff7aa8", fontcolor="#ff7aa8", tooltip="navigationAutomat → deliveryEditorAutomat (restore draft path)", label=" restore draft path ", weight=3];
userSettingsAutomat:p_usr_drawer:e -> chatAutomat:in0:n [color="#e0b25a", fontcolor="#e0b25a", tooltip="userSettingsAutomat → chatAutomat (chatDrawerWidth)", label=" chatDrawerWidth ", weight=3];
helpAutomat:p_help_active:e -> navigationAutomat:in0:n [color="#56c8c8", fontcolor="#56c8c8", tooltip="helpAutomat → navigationAutomat (route-contextual help)", label=" route-contextual help ", weight=3];
categoryAutomat:p_cat_categories:ne -> categoryAutomat:in4:n [color="#ff5f9e", fontcolor="#ff5f9e", tooltip="categoryAutomat → categoryAutomat (nested tree hierarchy)", label=" nested tree hierarchy ", weight=3];
artikelAutomat:p_art_set:ne -> artikelAutomat:in3:n [color="#ffb25a", fontcolor="#ffb25a", tooltip="artikelAutomat → artikelAutomat (variants &amp; parent SKU)", label=" variants &amp; parent SKU ", weight=3];
chatAutomat:p_chat_msg:nw -> chatAutomat:in2:n [color="#66b3ff", fontcolor="#66b3ff", tooltip="chatAutomat → chatAutomat (stream delta appends)", label=" stream delta appends ", weight=3];
}