Pular para o conteúdo principal

C4 — CentralCRM Front

Diagramas em texto (C4). Renderize em qualquer viewer Mermaid.

Nível 1 — Contexto

C4Context
title CentralCRM — contexto
Person(op, "Operador CRM", "Governa White Labels, usuários, taxas e tema")
System(front, "CentralCRM Front", "SPA React / Vite")
System_Ext(central, "API Central", "Auth, companies v1, presence, portal")
System_Ext(def, "API Default", "Governança, global-*, tenants, logs")
System_Ext(abecs, "ABECS MCC", "Tabelas CNAE/MCC QA e PRD")
Rel(op, front, "Usa", "HTTPS")
Rel(front, central, "REST + Socket.IO /presence")
Rel(front, def, "REST + Socket.IO /ws/logs")
Rel(front, abecs, "REST via proxy de dev")

Nível 2 — Containers (este repo)

C4Container
title Front — containers lógicos
Person(op, "Operador")
Container(spa, "SPA", "React 19", "Views, governança, i18n, tema")
Container(nginx, "Nginx", "imagem Docker", "Serve dist/, fallback SPA")
Container_Ext(central, "API Central")
Container_Ext(def, "API Default")
Rel(op, nginx, "HTTPS :80/:443")
Rel(nginx, spa, "index.html + assets")
Rel(spa, central, "fetch Bearer")
Rel(spa, def, "fetch Bearer")

Em desenvolvimento não há Nginx: Vite serve a SPA e faz proxy de /api e /socket.io.

Nível 3 — Componentes (SPA)

App.tsx
├── rotas públicas (Login, Forgot, Reset, FirstAccess)
└── ProtectedRoute
└── DashboardLayout (sidebar + topbar)
├── painel/
├── directories/ (governança)
├── views/SystemsView + integrationApiDocs/
├── Users / Roles / Profits / Invoices / Technical / Settings / Help / Profile
└── PresenceContext (socket)

HTTP sai só de models/services/*. Sessão: auth/ + sessionVault. Tenant: api/tenantContext.ts.