Replace hardcoded role-based access with granular per-panel permissions.
Each user can now be assigned any combination of 6 panels (Corporate, BI
Executive, Clientes, Providers, Usuarios, Meu Dashboard) regardless of
their role. Existing users are auto-migrated with defaults based on role.
- Add src/panels.js with panel registry and default permissions
- Add permissions column to SQLite + migration for existing users
- Add requirePermission() middleware, replace requireRole on all routes
- Dynamic nav in buildHeader based on user permissions
- Permissions checkbox UI in admin panel with role presets
- Anti-lockout: users cannot remove 'usuarios' from themselves
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix forecast chart confidence band fill config (fill:'+1' → explicit target)
to resolve 't.legend.handleEvent' TypeError in Chart.js 4.4.1
- Add getOrFetchRange() to cache.js: auto TTL based on data age
(end date >10 days old → 24h cache, recent → 5min cache)
- Apply smart cache to 6 heavy endpoints: bi, bi/revenue, bi/strategic,
providers, providers/failed, providers/trend
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merchants (via br_cb_empresas) agora mostram dados de CambioCheckout:
- fetchMerchantProfile detecta merchant e retorna lifetime checkout stats
- fetchMerchantData retorna KPIs, monthly, top payers e transacoes por periodo
- fetchTopClients inclui checkout volume (merchants sobem no ranking)
- fetchClientSearch inclui merchants nos resultados de busca
- Profile/data endpoints fazem merge automatico dos dados checkout
- UI: badge MERCHANT roxo, 6 hero cards checkout, chart mensal, top 10 payers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Cohort retention heatmap com matriz de retencao por mes de aquisicao
- Revenue expansion/contraction waterfall (new/expansion/stable/contraction/churned)
- Cross-sell analysis (CambioPay only vs CambioCheckout only vs Both)
- Client maturity segmentation (new/growing/mature/declining)
- Nova query fetchBIStrategic + endpoint /admin/api/bi/strategic
- Todas receitas de spread convertidas de BRL para USD em todas as queries
- Labels e formatacao atualizados para USD em admin-bi e admin-cliente
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Dark/light mode toggle across all pages (login, dashboard, corporate, admin, BI)
- BI Executive redesigned as permanent dark trading console (Bloomberg-style)
- Floating vertical nav with anchor scroll for mobile navigation
- Chart.js bundled locally (eliminates CDN dependency)
- Chart.js inlined in HTML for guaranteed loading
- Fix: themeScript </script> tag had literal backslash breaking HTML parser
- Fix: each chart wrapped in individual try/catch for graceful degradation
- No-cache headers on BI page to prevent stale HTML
- Robust init that handles DOMContentLoaded already fired
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Seção Revenue Analytics com cálculo real de receita por produto:
- Query completa com fees, pfee, bonus, taxa_cr por provider
- Granulação dinâmica (dia/mês/ano) com filtro de período
- KPIs: receita total, BR→US, US→BR, receita/operação
- Stacked bar por produto + donut composição + tabela detalhada
- Produtos: Checkout, CambioTransfer, balance, swift, etc.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Novo dashboard admin-only (/admin/bi) com BI profissional:
- 5 hero KPIs: receita spread, volume USD, transações, clientes ativos, ticket médio
- Revenue por corredor (donut) + spread médio + volume diário (dual-axis chart)
- Top 10 clientes por volume + taxa retenção + clientes em risco (30+ dias)
- Volume stacked por corredor + netting entrada/saída + ranking agentes
- Filtros: 7d, 30d, 90d, este mês, ou período custom
- Comparativo automático vs período anterior em todos os KPIs
- Responsivo mobile (5→2→1 cols) + trading terminal USD/BRL
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Adiciona widget de cotações ao vivo (USD/BRL e EUR/BRL) com design
estilo terminal de trading (dark theme, tipografia mono, glow effects)
- Proxy server-side /api/cotacao com cache 3s e token AwesomeAPI
- Auto-refresh a cada 3 segundos apenas quando a página está aberta
- Corrige cálculo de spread negativo: remove Math.abs() em USD→BRL
e Math.max(0,...) no spread líquido
- Corrige seção USD→BRL que não aparecia (filtro status !== 'finalizado')
- Corrige valor_reais no fluxo USD→BRL: agora calcula valor * cotação
- Adiciona classe CSS spread-negative para destacar spreads negativos
- Bandeiras de fluxo (BR/US/EU) nos botões de compra e venda
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Adiciona src/admin-dashboard.js com lazy loading
- KPIs: hoje vs media 30 dias por fluxo
- Graficos de tendencia 30 dias (consolidado e por fluxo)
- Ranking top 5 agentes com filtro de periodo
- Adiciona sistema de cache (src/cache.js)
- Cache com TTL e auto-refresh periodico (5-10min)
- APIs: /admin/api/kpis, /admin/api/trend, /admin/api/top-agentes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Passa email como parametro na URL de erro
- Preenche campo automaticamente ao recarregar
- Foca no campo senha quando email ja preenchido
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Adiciona coluna 'role' na tabela agentes (agente|admin)
- Migra admins existentes para tabela agentes com role='admin'
- Unifica login em /login com redirect baseado em role
- Sessao unificada req.session.user com {id, email, nome, role, agente_id}
- Middleware requireRole() para proteger rotas por role
- Admin panel com selector de role ao criar/editar usuarios
- Atualiza branding para "BI - CCC" com logo CambioReal
- Redirects: /admin/login -> /login, /admin/logout -> /logout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Independent dashboard for CambioReal agents with local SQLite auth
and read-only RDS connection. Features login, per-agent transaction
filtering, KPIs, charts (Chart.js), and detailed transaction table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>