34 Commits

Author SHA1 Message Date
c5b377e788 feat: update queries and client dashboard improvements
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 13:28:53 -04:00
root
8641100a18 feat: per-user panel permissions system
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>
2026-02-17 17:27:36 -05:00
root
cd5773a1be feat: add "Hoje" preset to corporate dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 13:16:50 -05:00
root
8689b7ec0d feat: skeleton shimmer for Client 360 + fix Chart.js event error on BI
- Add skeleton loading to admin-cliente.js: profile card, 12 hero KPIs,
  health/risk/netting values, 9 charts, transaction table
- Fix BI Chart.js handleEvent crash: use absolute-positioned skeleton
  overlays instead of display:none on canvases
- Fix setPreset null pointer on preset button querySelector

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 10:02:37 -05:00
root
d30e3865ec feat: add skeleton shimmer loading for BI Executive dashboard
Replace static '--' placeholders with animated skeleton screens so the
page feels alive while 4 async data sources load. Theme-aware via CSS
vars (works in dark Bloomberg mode + light mode).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:34:10 -05:00
root
42803bd946 fix: use pool instead of single conn for parallel queries
Single MySQL connection cannot handle concurrent prepared statements
via Promise.all — causes protocol conflicts and JSON parse errors.
Switch all bi.queries.js functions to use pool.execute() (each query
gets its own connection from pool). Bump connectionLimit 10→20.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:09:00 -05:00
root
ab7a886836 perf: parallelize BI queries to fix 504 timeout
- fetchBIData: 12 sequential queries → 1 Promise.all (14 parallel)
- fetchBIStrategic: 6 sequential queries → 4 parallel sections
  (cohorts, expansion, cross-sell, maturity), each with internal
  parallelism via Promise.all
- Total response time ≈ slowest single query instead of sum of all

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 23:01:44 -05:00
root
6bfd21a111 fix: chart.js legend error + smart cache for date-range queries
- 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>
2026-02-16 22:48:53 -05:00
root
844f931076 feat: BI-CCC evolution — 6-phase platform upgrade (45→85 maturity)
Phase 1: Refactor queries.js (1787 lines) into domain modules with facade pattern
  - src/queries/{helpers,payin,payout,corporate,bi,client,provider,compliance}.queries.js
  - New provider performance + compliance data layer queries
  - Health check endpoint (GET /health)

Phase 2: Provider Performance Dashboard (src/admin-providers.js)
  - Hero cards, sortable tables, Chart.js charts, date range filter
  - API routes: /admin/api/providers, /admin/api/providers/failed, /admin/api/providers/trend

Phase 3: Excel Export (exceljs)
  - CambioReal-branded exports for BI, clients, providers, transactions
  - Export buttons added to BI and Client 360 dashboards

Phase 4: Alert System (node-cron + nodemailer)
  - 5 alert rules: volume spike, spread anomaly, large tx, failed tx spike, provider inactivity
  - SQLite alerts table, bell icon UI with acknowledge workflow
  - Email notifications via SMTP

Phase 5: Enhanced Analytics
  - Churn prediction: weighted RFM model (src/services/churn-predictor.js)
  - Volume forecasting: exponential smoothing with confidence bands (src/services/forecast.js)
  - Forecast chart in BI dashboard, churn risk in Client 360

Phase 6: SQLite Analytics Store (ETL)
  - src/db-analytics.js: daily_metrics, client_health_daily, monthly_revenue tables
  - src/etl/daily-sync.js: MySQL RDS → SQLite daily sync at 1 AM + 90-day backfill
  - src/etl/data-quality.js: post-sync validation (row counts, reconciliation)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 20:22:23 -05:00
root
a76ab30730 feat: integra dados de merchant/checkout no Client 360
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>
2026-02-16 16:47:11 -05:00
root
600a8044c2 fix: closing script tag duplo-escapado em admin-cliente (<\\/script> → <\/script>)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 16:01:21 -05:00
root
6c925db42b fix: busca server-side + top 20 clientes (antes carregava 261K clientes no browser)
- fetchClientList separado em fetchTopClients (top 20 LIMIT) e fetchClientSearch (LIKE server-side)
- Novos endpoints: /admin/api/clientes/top e /admin/api/clientes/search?q=
- Cards clicaveis com data-id/data-nome + event delegation (sem inline onclick)
- Busca agora faz fetch server-side com debounce 300ms (min 2 chars)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:56:22 -05:00
root
ef80c4185d feat: top 20 clientes por volume com cards clicaveis agrupados por faixa
- fetchClientList agora retorna volume USD, ops, meses ativos e ultima op
- Top 20 clientes exibidos como cards clicaveis na tela inicial
- Agrupados em 3 faixas: Alto Volume, Medio Volume, Menor Volume
- Cards mostram volume total, ops e media mensal
- Click no card carrega o dashboard 360 do cliente

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:47:36 -05:00
root
e57aaef3e7 fix: corrige template expressions escapadas em admin-cliente (CSS/header/footer ausentes)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 15:42:38 -05:00
root
175e21b2d4 feat: BI estrategico — cohort retention, revenue expansion, cross-sell, maturity + receita em USD
- 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>
2026-02-16 15:36:39 -05:00
root
4595be0b07 feat: dashboard cliente 360 — visao completa por cliente com KPIs, timeline, fluxos e transacoes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 13:16:26 -05:00
root
95958e9a96 feat: dark/light mode + trading console BI + Chart.js local + fix themeScript
- 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>
2026-02-15 10:21:05 -05:00
root
ddf016a627 feat: otimiza admin BI executive para mobile/responsivo
Adiciona 3 breakpoints progressivos (900px, 768px, 480px) com:
- Touch targets min 44px em botões de filtro e granulação
- Filtros empilhados verticalmente no mobile
- KPIs: 5→3→2→1 colunas progressivamente
- Tabelas com scroll horizontal touch-friendly
- Trading terminal compacto em telas pequenas
- Charts e gauges redimensionados por breakpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:13:37 -05:00
root
e09ed98aef feat: trading terminal responsivo mobile + spread ajustado USD/BRL
Adiciona CSS responsivo para trading terminal nos breakpoints 900px e 600px.
Aplica spread corporativo nas cotações USD live (compra: -0.43%, venda: +0.05%).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:07:28 -05:00
root
5ecf91a024 feat: revenue analytics (P&L real) no BI admin
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>
2026-02-14 12:49:03 -05:00
root
cadc4cd01e fix: corrige unicode flags no trading terminal do BI
Double-escaped unicode sequences (\uD83C) estavam renderizando
como texto literal em vez de emojis de bandeira.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:54:09 -05:00
root
e24fcd64e3 feat: admin BI executive dashboard - visão estratégica completa
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>
2026-02-14 10:52:55 -05:00
root
3514755491 feat: trading terminal corporate - só USD/BRL + responsivo mobile
Remove EUR/BRL do terminal nas páginas corporate (home e dashboard),
mantendo apenas USD/BRL. Melhora layout mobile com breakpoints
otimizados para 768px e 480px (coluna vertical, fontes maiores).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:15:35 -05:00
root
7ee15ad5e5 feat: trading terminal live rates + fix spread negativo + fix USD→BRL
- 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>
2026-02-10 22:30:43 -05:00
root
1ad28f54dd fix: corrige alinhamento - container agora 1600px
Todos os elementos agora usam max-width: 1600px:
- header-inner: 1600px, padding 40px
- filters-inner: 1600px, padding 40px
- container: 1600px, padding 40px (era 1480px)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 14:12:09 -05:00
root
9648095048 fix: alinha filtros com corpo e remove alertas
- Header e filtros alinhados com container (1600px)
- Adiciona filters-inner wrapper
- Remove secao de Alertas Inteligentes (CSS, HTML e JS)
- Responsivo atualizado

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 14:09:23 -05:00
root
9bf17d290a fix: atualiza dashboard.js com template consistente
- Header com mesma estrutura do ui-template
- Logo com fundo branco e bordas arredondadas
- Conteudo limitado a 1600px e centralizado
- Estilos responsivos atualizados

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 14:04:46 -05:00
root
ae8a675e52 fix: ajusta UI do header - logo com fundo branco e alinhamento
- Adiciona fundo branco com bordas arredondadas na logo
- Header content alinhado com body (max-width: 1600px)
- Adiciona wrapper header-inner para controle de largura

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 13:59:30 -05:00
root
022993b201 feat: novo dashboard admin com KPIs, tendencias e ranking
- 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>
2026-02-08 13:53:55 -05:00
root
627fa8e7a4 fix: corrige cores CambioReal e Chart.js no admin
- Remove verde do header admin, usa roxo CambioReal (#5A0091)
- Corrige Chart.js movendo script para fora do <style>
- Adiciona parametro scripts ao buildHead()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 13:24:15 -05:00
root
96222aa6a2 chore: adiciona Docker, scripts e documentacao
- Adiciona Dockerfile e docker-compose para containerizacao
- Adiciona docker-entrypoint.sh com inicializacao
- Adiciona scripts/seed-admin.js para criar admin inicial
- Adiciona docs/ com logos originais CambioReal
- Atualiza README.md com instrucoes de uso
- Atualiza queries.js com metricas de portfólio

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 13:20:15 -05:00
root
1321b949e4 feat: design system unificado com template e cores CambioReal
- Cria src/ui-template.js com header, footer e estilos compartilhados
- Atualiza admin-home.js e admin-panel.js para usar template
- Atualiza dashboard.js com logo e cores CambioReal (#7600be)
- Atualiza login.html com novo branding BI-CCC
- Adiciona public/logo.png (CambioReal original)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 13:20:05 -05:00
root
be2b090ddc feat: login unificado BI-CCC com deteccao automatica de role
- 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>
2026-02-08 13:03:52 -05:00
39900c3fe8 Initial commit: BI Agentes platform
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>
2026-02-07 15:47:07 -05:00