/* ============================================================ AppData.jsx — conteúdo dos módulos + atoms refinados de UI Visual SaaS premium, dark, minimalista. Cada módulo traz conteúdo para 3 papéis distintos: web (completo), tablet (intermediário) e mobile (compacto). ============================================================ */ /* paleta interna das telas */ const SC = { bg: '#080C16', panel: '#0C1220', panel2: '#0E1424', line: 'rgba(255,255,255,0.06)', lineStrong: 'rgba(255,255,255,0.10)', text: '#EDF1FA', mut: '#8A93AB', dim: '#5C6680', cyan: '#00D4FF', blue: '#005EFF', green: '#1FD17B', amber: '#FFB020', red: '#FF5A6B', }; /* ---------- dados dos módulos ---------- */ const AR_MODULES = [ { id: 'gestao', label: 'Gestão', icon: 'layout-dashboard', accent: '#00D4FF', page: 'Painel executivo', web: 'chart', kpis: [ { l: 'Receita do mês', v: 'R$ 284,9k', d: '+12,4%', up: true }, { l: 'Pedidos', v: '1.842', d: '+8,1%', up: true }, { l: 'Ticket médio', v: 'R$ 154', d: '+3,0%', up: true }, { l: 'NPS', v: '72', d: '+6', up: true }, ], chartTitle: 'Receita reconhecida', chartHint: 'últimos 6 meses', series: [42, 51, 47, 63, 70, 88], labels: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun'], ai: 'Projeção de R$ 312k para o próximo mês (+9%). Reforce o estoque das 3 categorias de maior giro.', aiAction: 'Ver plano sugerido', listTitle: 'Prioridades de hoje', list: [ ['circle-check', 'Aprovar 3 pedidos acima de R$ 10k', 'aprovar'], ['triangle-alert', '12 SKUs abaixo do ponto de pedido', 'estoque'], ['calendar-clock', 'Fechamento financeiro em 2 dias', 'prazo'], ], ring: { label: 'Meta do mês', pct: 87, sub: 'R$ 284,9k de R$ 327k' }, hero: { l: 'Receita do mês', v: 'R$ 284,9k', d: '+12,4%', up: true, sub: 'vs. mês anterior' }, }, { id: 'atendimento', label: 'Atendimento', icon: 'headset', accent: '#00D4FF', page: 'CRM · Atendimento', web: 'pipeline', kpis: [ { l: 'Atendimentos hoje', v: '327', d: '+18%', up: true }, { l: 'Tempo médio', v: '1m 12s', d: '-22%', up: true }, { l: 'Resolvido pela IA', v: '78%', d: '+6 p.p.', up: true }, { l: 'CSAT', v: '4,8', d: '+0,3', up: true }, ], pipeline: [ { stage: 'Novo lead', count: 24, cards: [['MS', 'Mercado São João', 'R$ 8,2k']] }, { stage: 'Qualificação', count: 18, cards: [['VC', 'Vera Cruz', 'R$ 14k']] }, { stage: 'Em atendimento', count: 12, cards: [['LA', 'Loja Aurora', 'R$ 6,4k']] }, { stage: 'Proposta', count: 9, cards: [['TP', 'Tech Ponto', 'R$ 21k']] }, { stage: 'Fechado', count: 15, cards: [['DF', 'Dist. Farol', 'R$ 11k']] }, ], series: [8, 14, 22, 31, 27, 19, 24, 33, 21], labels: ['8h', '11h', '14h', '17h', '20h'], chartTitle: 'Volume por hora', chartHint: 'hoje', ai: 'Priorizei 6 oportunidades com alta intenção de compra e sugeri follow-up para 3 propostas paradas há 48h.', aiAction: 'Distribuir para o time', listTitle: 'Fila em tempo real', list: [ ['user', 'Ana Prado · 2ª via de boleto', 'IA'], ['user', 'Construtora Vera Cruz · suporte', 'quente'], ['user', 'Loja Aurora · orçamento', 'aguardando'], ], ring: { label: 'Resolvido pela IA', pct: 78, sub: '255 de 327 atendimentos' }, hero: { l: 'Na fila agora', v: '8', d: 'SLA 2m', up: true, sub: '3 priorizados pela IA' }, }, { id: 'financeiro', label: 'Financeiro', icon: 'wallet', accent: '#1FD17B', page: 'Financeiro', web: 'cashflow', kpis: [ { l: 'A receber', v: 'R$ 96,2k', d: '+4%', up: true }, { l: 'A pagar', v: 'R$ 41,8k', d: '-9%', up: true }, { l: 'Saldo projetado', v: 'R$ 212k', d: '+11%', up: true }, { l: 'Inadimplência', v: '2,1%', d: '-0,4 p.p.', up: true }, ], series: [60, 72, 65, 80, 76, 92], series2: [38, 41, 44, 39, 42, 40], labels: ['S1', 'S2', 'S3', 'S4', 'S5', 'S6'], chartTitle: 'Entradas x saídas', chartHint: '6 semanas', ai: 'Fluxo positivo nas próximas 4 semanas. Antecipar 2 pagamentos com desconto economiza R$ 3,2k em juros.', aiAction: 'Aplicar sugestão', listTitle: 'Contas a vencer', list: [ ['file-text', 'Fornecedor Atlas · R$ 12.400', '2 dias'], ['file-text', 'Energia · R$ 3.180', '4 dias'], ['file-text', 'Folha de pagamento · R$ 21.900', '5 dias'], ], ring: { label: 'Margem líquida', pct: 34, sub: '+2,3 p.p. no mês' }, hero: { l: 'Saldo projetado', v: 'R$ 212k', d: '+11%', up: true, sub: 'próximos 30 dias' }, }, { id: 'estoque', label: 'Estoque', icon: 'package', accent: '#FFB020', page: 'Estoque & Suprimentos', web: 'bars', kpis: [ { l: 'SKUs ativos', v: '1.204', d: '+5%', up: true }, { l: 'Em falta', v: '18', d: '-7', up: true }, { l: 'Giro médio', v: '4,2x', d: '+0,3', up: true }, { l: 'Valor em estoque', v: 'R$ 487k', d: '+2%', up: true }, ], series: [78, 54, 91, 33, 67, 48], labels: ['Bebidas', 'Limpeza', 'Higiene', 'Mercearia', 'Frios', 'Padaria'], chartTitle: 'Nível por categoria', chartHint: '% do ideal', ai: '12 itens abaixo do ponto de pedido. Gerei uma ordem de compra com base na previsão de demanda.', aiAction: 'Revisar ordem de compra', listTitle: 'Reposição prioritária', list: [ ['package', 'Café torrado 500g · 6 un.', 'crítico'], ['package', 'Detergente 5L · 11 un.', 'baixo'], ['package', 'Arroz 5kg · 4 un.', 'crítico'], ], ring: { label: 'Cobertura de estoque', pct: 68, sub: '~21 dias de venda' }, hero: { l: 'Itens para repor', v: '12', d: 'ordem pronta', up: true, sub: 'sugerido pela IA' }, }, { id: 'vendas', label: 'Vendas', icon: 'trending-up', accent: '#00D4FF', page: 'Comercial & Vendas', web: 'funnel', funnel: [ { stage: 'Visitantes', v: '8.400', pct: 100 }, { stage: 'Leads', v: '1.260', pct: 64 }, { stage: 'Qualificados', v: '470', pct: 41 }, { stage: 'Propostas', v: '138', pct: 24 }, { stage: 'Fechados', v: '47', pct: 13 }, ], kpis: [ { l: 'Faturamento', v: 'R$ 318k', d: '+15%', up: true }, { l: 'Conversão', v: '3,4%', d: '+0,6 p.p.', up: true }, { l: 'Oportunidades', v: '214', d: '+22%', up: true }, { l: 'Meta atingida', v: '87%', d: '+9 p.p.', up: true }, ], series: [55, 62, 58, 74, 81, 96], labels: ['S1', 'S2', 'S3', 'S4', 'S5', 'S6'], chartTitle: 'Faturamento semanal', chartHint: '6 semanas', ai: 'Identifiquei 23 leads quentes (68% de probabilidade de fechamento) e sugiro uma campanha para 312 carrinhos abandonados.', aiAction: 'Criar campanha', listTitle: 'Oportunidades em destaque', list: [ ['briefcase', 'Vera Cruz · proposta enviada', '68%'], ['briefcase', 'Loja Aurora · negociação', '54%'], ['briefcase', 'Tech Ponto · follow-up', '41%'], ], ring: { label: 'Meta do mês', pct: 87, sub: 'R$ 318k de R$ 365k' }, hero: { l: 'Faturamento no mês', v: 'R$ 318k', d: '+15%', up: true, sub: '87% da meta' }, }, { id: 'rh', label: 'RH', icon: 'users', accent: '#7CB0FF', page: 'Pessoas & Cultura', web: 'chart', kpis: [ { l: 'Colaboradores', v: '86', d: '+4', up: true }, { l: 'Admissões no mês', v: '5', d: '+2', up: true }, { l: 'Turnover', v: '4,0%', d: '-0,8 p.p.', up: true }, { l: 'eNPS', v: '72', d: '+6', up: true }, ], series: [70, 73, 75, 79, 82, 86], labels: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun'], chartTitle: 'Headcount', chartHint: 'últimos 6 meses', ai: 'Triei 140 currículos e indiquei 8 candidatos para Vendedor Pleno. 2 colaboradores em risco de turnover.', aiAction: 'Ver recomendações', listTitle: 'Agenda de pessoas', list: [ ['user-round', 'Vendedor Pleno · 8 finalistas', 'entrevista'], ['graduation-cap', 'Treinamento de IA · 24 inscritos', 'hoje'], ['calendar', 'Avaliações de desempenho', 'esta semana'], ], ring: { label: 'Clima organizacional', pct: 84, sub: 'eNPS 72 · ótimo' }, hero: { l: 'Colaboradores ativos', v: '86', d: '+4', up: true, sub: '5 admissões no mês' }, }, ]; /* ---------- helpers ---------- */ const tagStyle = (s) => { s = String(s).toLowerCase(); if (['crítico', 'urgente', 'atrasado'].includes(s)) return { c: SC.red, bg: 'rgba(255,90,107,0.12)', bd: 'rgba(255,90,107,0.28)' }; if (['ia', 'aprovar', 'fechado'].includes(s)) return { c: SC.cyan, bg: 'rgba(0,212,255,0.12)', bd: 'rgba(0,212,255,0.28)' }; if (['baixo', 'aguardando', 'prazo', 'hoje', 'estoque'].includes(s)) return { c: SC.amber, bg: 'rgba(255,176,32,0.12)', bd: 'rgba(255,176,32,0.28)' }; if (['quente', 'entrevista'].includes(s)) return { c: '#FF8A5B', bg: 'rgba(255,138,91,0.12)', bd: 'rgba(255,138,91,0.28)' }; return { c: SC.green, bg: 'rgba(31,209,123,0.12)', bd: 'rgba(31,209,123,0.28)' }; }; const Tag = ({ children, sm }) => { const s = tagStyle(children); return {children}; }; const Delta = ({ d, up, size = 10.5 }) => ( {d} ); /* área/linha — discreta */ const Area = ({ data, w = 320, h = 92, color = '#00D4FF', uid = 'a', secondary, pad = 6 }) => { const all = secondary ? data.concat(secondary) : data; const max = Math.max(...all), min = Math.min(...all); const nx = i => pad + (i / (data.length - 1)) * (w - pad * 2); const ny = v => h - pad - ((v - min) / ((max - min) || 1)) * (h - pad * 2 - 4); const ln = a => a.map((v, i) => `${nx(i).toFixed(1)},${ny(v).toFixed(1)}`).join(' '); return ( ); }; const Bars = ({ data, w = 320, h = 92, pad = 6, uid = 'b' }) => { const max = Math.max(...data); const bw = (w - pad * 2) / data.length; return ( ); }; /* anel de progresso */ const Ring = ({ pct, size = 86, stroke = 8, uid = 'r', label, value }) => { const r = (size - stroke) / 2, c = 2 * Math.PI * r, off = c * (1 - pct / 100); return (
{m.ai}