Como funciona, camada por camada
Diagrama interativo dos fluxos principais: resolução de tenant no login, proposta → trial → meSign → ativação, import de CDR → tarifação → bloqueio/desbloqueio, fechamento mensal e NFCom, deploy no LAB e backup. Fontes: 03-ARCHITECTURE.md §4–§10, 05-INFRA.md, 10-DECISIONS.md.
Como ler o diagrama
Estado de cada peça
decidido descrito e previsto no blueprint em construção fork / épicos em andamento a confirmar depende de operador ou terceiro
Tipo de ligação
HTTP / navegador filas Redis / Horizon PostgreSQL legado e parceiros CI / deploy segredos backup
Diagrama
Escolha um fluxo; as setas numeradas correspondem à lista abaixo. Sem JavaScript, zonas e listas permanecem legíveis.
Pessoas
Borda
D-INF-11
Aplicações (VM app)
admin[.lab].vc1.com.br · staff + 2FA TOTP/painel revenda · /app cliente · /p/{code}api[.lab].vc1.com.br · Sanctum · webhooksWorkers (Horizon)
schedule 5 min
5 s
Redis 7
Dados
endpoint A VERIFICAR
Externos
porta A VERIFICAR
spec A VERIFICAR
Entrega e operação
front/* · CI · merge mainauto pós-main
destino alerta A VERIFICAR
D-INF-17
Visão geral
- Navegador → Caddy. Host define tenant e certificado wildcard.
- Caddy → Filament. Staff VC1 + 2FA.
- Caddy → SPA. Painel, app cliente, proposta pública.
- SPA → API. Cookie stateful por host; totais só servidor.
- API → Redis. Horizon: rating, billing, outbox.
- Redis → workers. Import/rate/debit/block.
- API → PostgreSQL. Mutação + outbox na mesma TX.
- Outbox → ERP. Cadastro tronco/cliente WL.
- Outbox → SipPulse. Subscriber, DID, block.
- ImportCdr → MySQL. Watermark incremental.
- GitHub → deploy-lab. Merge
mainverde publica LAB. - PG → backup. RPO 5 min PROD (WAL).
Login e resolução de tenancy
- Navegador → Caddy.
{slug}.vc1.com.brouadmin.vc1.com.br. - Caddy → SPA. Sanctum stateful no domínio do slug.
- SPA → API. Credenciais; tenant = Host.
- API → PG. Papéis vc1_* ou reseller_* / customer_*.
- Login genérico. Autentica, descobre slug, 302 para
{slug}.vc1.com.br. - Staff → Filament. TOTP obrigatório (D-ARQ-08).
- Segredos → API. Cookies host-only; SESSION_DOMAIN null.
Proposta → trial → aceite → meSign → ativação
- Revenda → API. POST proposals; stage draft.
- Prospecto → /p/{code}. PIN; trial se plano permitir.
- API → ERP. Cliente WL; legacy_id_map.
- API → SipPulse. trial_active / callLimit.
- Aceite → PG. accepted; pending_signature.
- API → meSign. sign_url ao prospecto.
- meSign → API. HMAC; envelope.completed.
- Pós-assinatura. subscription active; kanban won.
- TX → outbox. Falha legado = retry; rollback se falha comercial.
CDR → rating → débito pré-pago → bloqueio
- Scheduler → MySQL. id > watermark; duration para 30/6.
- RateBatch → PG. cost_cents VC1; sell_cents plano.
- Pré-pago. UNIQUE usage_record_id.
- Saldo ≤ 0. blocked_credit + block_events.
- Redis lock. Ordem (started_at, legacy_cdr_id).
- Pós-pago. limit_events; block em 100%.
Webhook de pagamento → desbloqueio
- mePay → API. event paid + idempotency.
- Inbox dedupe. 200 se já processado.
- PG. payments; invoice.status=paid.
- Desbloqueio. Se blocked_credit/overdue/limit resolvido.
- PG. block_events unblock; active.
Fechamento mensal, NFCom e modos de cobrança
- Job → PG. Ciclo mês calendário America/Sao_Paulo.
- Cálculo. DIDs/canals pró-rata + minutos 30/6.
- Modo revenda fatura. statements + invoice revenda; cobrança mePay.
- FiscalPort → mePay. NFCom async; chave 44 dígitos no webhook.
- Modo VC1 fatura. charge cliente; payout após paid.
- Inadimplente. Custo não pago não entra no mínimo revenda.
Deploy no LAB (merge em main)
LAB: https://api.lab.vc1.com.br, wildcard *.lab.vc1.com.br (D-INF-20). PROD: workflow_dispatch + environment protection.
- Push main. Pint, Pest, Vitest; build GHCR.
- CI → vc1-lab. pull · compose up · migrate --force.
- Smoke. GET /api/v1/health; queue:restart.
- Segredos. beesy-secrets/commerce-vc1/lab.env (referência).
Backup e retenção
- PG → S3. Prefix WAL; RPO PROD 5 min (D-INF-16).
- Base backup. Retenção WAL/objects 14 d; noncurrent 30 d.
- PBS. keep-daily 7 + weekly 4 (D-INF-17).
- Restore. GO operador; não reenviar outbox fiscal sem conciliação.
Itens a confirmar
Texto canônico em 05-INFRA.md §14 e 10-DECISIONS.md §6–§7.
- Custos meCloud: preço mensal a confirmar com financeiro (dimensionamento em estrutura).
- D-INT-08 / D-INF-24: contrato mePay e URL base
VERIFICAR(bloqueia só E5). - OpenAPI revenda: contrato público a definir (REV-28; E5+).
- D-INF-07: porta MySQL
sippulse_reports—A VERIFICAR; 3306 não confirmado. - D-INF-18: endpoint meStorage S3 —
A VERIFICAR. - D-INF-23: destinatário de alerta (e-mail/Telegram) —
A VERIFICAR. - D-INF-09 / D-INT-14: GO demo legado + allowlist LAB.
- D-INF-10 / D-ARQ-06: domínio SIP — não publicar até GO.