Sistema de Gestão · Sandra Otto Advocacia
// ── CLOCK ──────────────────────────────────────────────────
(function clock(){
const el=document.getElementById('top-clock');
if(el){const n=new Date();el.textContent='🕐 '+n.getHours().toString().padStart(2,'0')+':'+n.getMinutes().toString().padStart(2,'0');}
setTimeout(clock,10000);
})();
// ── TOP TAB SYNC ───────────────────────────────────────────
const tabMap={dash:'dash',feed:'dash',negocios:'negocios',crm:'crm',financeiro:'financeiro',rh:'rh',clientes:'juridico',processos:'juridico',jurtasks:'juridico',agenda:'dash',documentos:'dash',marketing:'marketing',messenger:'messenger',cos:'esg',deals:'esg',impl:'esg',tasks:'esg',cal:'esg',settings:'settings',company:'esg',perfil:'settings'};
function syncTopTab(view){
const key=tabMap[view]||'dash';
document.querySelectorAll('.top-tab').forEach(t=>t.classList.toggle('on',t.dataset.v===key));
}
const _origNav=nav;
function nav(view,params={}){
_origNav(view,params);
syncTopTab(view);
}
// ── UTILS (new) ──────────────────────────────────────────
function dtNow(){const d=new Date();const ds=['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'];const ms=['janeiro','fevereiro','março','abril','maio','junho','julho','agosto','setembro','outubro','novembro','dezembro'];return ds[d.getDay()]+', '+d.getDate()+' de '+ms[d.getMonth()]+' de '+d.getFullYear();}
// ── DASHBOARD (GCJ Inove layout) ──────────────────────────
async function rDash(){
document.getElementById('cta').textContent='';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='Painel';
setLoad();
try{
const[esgSt,jurSt,jurtasks,impl,cos]=await Promise.all([
GET('esg/stats'),GET('stats'),GET('jurtasks'),GET('esg/implementations'),GET('esg/companies')
]);
const pendFin=parseFloat(jurSt.receita_pendente||0);
const despesas=parseFloat(jurSt.total_despesas||0);
const resultado=pendFin-despesas;
const tasksPend=(jurtasks||[]).filter(t=>t.status!=='Concluído').length;
const topTasks=(jurtasks||[]).filter(t=>t.status!=='Concluído').slice(0,3);
const nome=document.getElementById('sb-un')?.textContent||'Sandra';
const hr=new Date().getHours();
const saud=hr<12?'Bom dia':hr<18?'Boa tarde':'Boa noite';
document.getElementById('ct').innerHTML=`
☀️ ${saud}, ${nome.split(' ')[0]}!
${dtNow()} · Sandra Otto Advocacia
Honorários Pendentes
R$ ${Number(pendFin).toLocaleString('pt-BR',{minimumFractionDigits:0,maximumFractionDigits:0})}
Aguardando recebimento
Despesas
R$ ${Number(despesas).toLocaleString('pt-BR',{minimumFractionDigits:0,maximumFractionDigits:0})}
Total lançado
Resultado
R$ ${Number(Math.abs(resultado)).toLocaleString('pt-BR',{minimumFractionDigits:0,maximumFractionDigits:0})}
${resultado>=0?'Superávit':'Déficit'}
Processos Ativos
${jurSt.processos_ativos||0}
Em andamento
Clientes Ativos
${jurSt.clientes_ativos||0}
Cadastrados no sistema
Documentos
${jurSt.total_documentos||0}
Registrados
Tarefas
${tasksPend}
Pendentes
Audiências Hoje
${jurSt.audiencias_hoje||0}
Agendadas
Empresas ESG
${esgSt.companies||0}
Cadastradas
Pipeline ESG
${esgSt.deals_open||0}
Negócios abertos
Implementações ESG
${esgSt.impl_open||0}
Em andamento
Tarefas ESG
${(esgSt.tasks_pending||0)+(esgSt.tasks_progress||0)}
Abertas
📣
Feed da Equipe
Comunicados, eventos e arquivos · visível para todos
Nenhuma publicação ainda. Seja o primeiro a compartilhar!
📅
Calendário
Agenda e eventos
💰
Financeiro
Fluxo e honorários
📄
Documentos
Arquivos e contratos
✅
Tarefas
Pendentes: ${tasksPend}
⚖️
Processos
Casos ativos: ${jurSt.processos_ativos||0}
`;
}catch(e){errPage(e);}
}
// ── FEED ─────────────────────────────────────────────────
function rFeed(){
document.getElementById('cta').textContent='+ Nova Publicação';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='Feed';
document.getElementById('ct').innerHTML=`
📣
Feed da Equipe
Comunicados, eventos e arquivos
📰
Nenhuma publicação ainda
Seja o primeiro a compartilhar uma atualização com a equipe.
`;
}
// ── NEGÓCIOS / PIPELINES ──────────────────────────────────
function rNegocios(){
document.getElementById('cta').textContent='+ Novo Negócio';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='Negócios / Pipelines';
const cols=['Prospecção','Proposta','Negociação','Fechado'];
const colors=['#1F3763','#0059b3','#e65100','#62974B'];
document.getElementById('ct').innerHTML=`
${cols.map((c,i)=>`
`).join('')}
`;
}
// ── CRM / LEADS ───────────────────────────────────────────
function rCRM(){
document.getElementById('cta').textContent='+ Novo Lead';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='CRM / Leads';
document.getElementById('ct').innerHTML=`
| Nome | Email | Telefone | Origem | Status | Data |
|---|
| Nenhum lead cadastrado |
`;
}
// ── RH ───────────────────────────────────────────────────
function rRH(){
document.getElementById('cta').textContent='+ Novo Colaborador';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='RH — Colaboradores';
document.getElementById('ct').innerHTML=`
${[['👔','Colaboradores','0','Ativos'],['📅','Férias','0','Em andamento'],['✅','Avaliações','0','Pendentes'],['📋','Contratos','0','Ativos']].map(([ic,lb,v,h])=>`
`).join('')}
| Nome | Cargo | Departamento | Admissão | Status |
|---|
| Nenhum colaborador cadastrado |
`;
}
// ── MARKETING ──────────────────────────────────────────────
function rMarketing(){
document.getElementById('cta').textContent='+ Nova Campanha';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='Marketing';
document.getElementById('ct').innerHTML=`
${[['📣','Campanhas Ativas','0','Em execução'],['👤','Leads Gerados','0','Este mês'],['📧','E-mails Enviados','0','Último envio'],['📊','Taxa Conversão','0%','Média geral']].map(([ic,lb,v,h])=>`
`).join('')}
📣
Nenhuma campanha ativa
Crie sua primeira campanha de marketing para o escritório.
`;
}
// ── MESSENGER ──────────────────────────────────────────────
function rMessenger(){
document.getElementById('cta').textContent='+ Nova Conversa';
document.getElementById('cta').onclick=null;
document.getElementById('tb-bc').innerHTML='Messenger';
document.getElementById('ct').innerHTML=`
💬
Selecione uma conversa
ou inicie uma nova mensagem
`;
}