/* ============================================================ EMPRESA > FINANCEIRO > CLIENTES (lista + subpágina + editar/excluir) Agora com periodicidade de cobrança (mensal/trimestral/anual). ============================================================ */ function FinClientesList({ clientes, onNew, onEdit, onDelete }){ const [busca, setBusca] = useState(''); const filtrados = busca ? clientes.filter(c=>{ const q = busca.toLowerCase(); return c.nome.toLowerCase().includes(q) || c.cnpj.toLowerCase().includes(q) || c.email.toLowerCase().includes(q) || c.servico.toLowerCase().includes(q); }) : clientes; return (

Clientes Cadastrados ({filtrados.length})

setBusca(e.target.value)}/>
{filtrados.map(c=>( ))} {filtrados.length===0 && }
ClienteCNPJE-mailServiço PrestadoValorPeriodicidade
{c.nome}
{c.endereco}
{c.cnpj} {c.email} {c.servico} {fmtBRL(c.valorMensal||0)} {PERIODICIDADE_LABELS[c.periodicidade]||'Mensal'}
{busca ? 'Nenhum cliente encontrado com essa busca.' : 'Nenhum cliente cadastrado.'}
); } function FinClientesForm({ editingClient, onSave, onCancel }){ const [nome,setNome]=useState(editingClient?.nome||''); const [cnpj,setCnpj]=useState(editingClient?.cnpj||''); const [email,setEmail]=useState(editingClient?.email||''); const [endereco,setEndereco]=useState(editingClient?.endereco||''); const [servico,setServico]=useState(editingClient?.servico||''); const [valorMensal,setValorMensal]=useState(editingClient? String(editingClient.valorMensal) : ''); const [periodicidade,setPeriodicidade]=useState(editingClient?.periodicidade || 'mensal'); function submit(e){ e.preventDefault(); if(!nome||!cnpj||!email||!endereco||!servico||valorMensal==='') return; onSave({ nome, cnpj, email, endereco, servico, valorMensal:parseFloat(valorMensal), periodicidade }); } return (

{editingClient ? 'Editar Cliente' : 'Novo Cliente'}

setNome(e.target.value)} placeholder="Ex: Ana Souza — Souza Tecnologia" required/>
setCnpj(e.target.value)} placeholder="00.000.000/0001-00" required/>
setEmail(e.target.value)} placeholder="contato@empresa.com" required/>
setEndereco(e.target.value)} placeholder="Rua, número — Cidade/UF" required/>
setServico(e.target.value)} placeholder="Ex: Suporte N2, Consultoria..." required/>
setValorMensal(e.target.value)} placeholder="0,00" required/>

Essa periodicidade é usada para projetar automaticamente as cobranças futuras deste cliente na aba Caixa.

); } function PageFinClientes({ clientes, onSave, onDelete }){ const [view, setView] = useState('list'); const [editing, setEditing] = useState(null); const editingClient = editing ? clientes.find(c=>c.id===editing) : null; return view==='form' ? { onSave(data, editing); setView('list'); setEditing(null); }} onCancel={()=>{setView('list'); setEditing(null);}}/> : {setEditing(null); setView('form');}} onEdit={(id)=>{setEditing(id); setView('form');}} onDelete={onDelete}/>; }