const { useState } = React; // ─── Authority Table ───────────────────────────────────────────────────────── function AuthorityTable() { const rows = [ { range: 'Até R$ 10k', authority: 'Gerente de Disciplina', sla: '4h', badge: 'default' }, { range: 'R$ 10k – R$ 50k', authority: 'Gerente Obra + Coord. Financeiro', sla: '8h', badge: 'default' }, { range: 'R$ 50k – R$ 200k', authority: 'PMO Sênior + Controller', sla: '24h', badge: 'primary' }, { range: 'R$ 200k – R$ 500k', authority: 'CFO + Ger. Geral Obras', sla: '48h', badge: 'warning' }, { range: 'Acima R$ 500k', authority: 'Diretoria (2 assinaturas) + CEx', sla: '72h', badge: 'danger' }, { range: 'Urgência', authority: 'Qualquer alçada + superior', sla: '2h', badge: 'danger' }, ]; return (
{rows.map((r, i) => ( ))}
Faixa de Valor Autoridade Aprovadora SLA
{r.range} {r.authority} {r.sla}
); } // ─── Auth value bracket ────────────────────────────────────────────────────── function authBracket(val) { if (val <= 10000) return { label:'≤ R$10k', variant:'default' }; if (val <= 50000) return { label:'≤ R$50k', variant:'default' }; if (val <= 200000) return { label:'≤ R$200k', variant:'primary' }; if (val <= 500000) return { label:'≤ R$500k', variant:'warning' }; return { label:'> R$500k', variant:'danger' }; } // ─── Request Row ───────────────────────────────────────────────────────────── function RequestRow({ req, onAction }) { const [expanded, setExpanded] = useState(false); const [comment, setComment] = useState(''); const brk = authBracket(req.value); const slaRatio = req.slaRemaining / req.slaHours; const slaExpired = req.slaRemaining <= 0; return ( <> setExpanded(e => !e)}>
{req.urgent && URGENTE} {req.id}
{req.item} {req.requester} {fmtBRL(req.value)} {req.wbs}
req.value ? C.success : C.danger, fontWeight:600 }}>{fmtBRL(req.budgetBalance)}
e.stopPropagation()}> onAction(req.id, 'approve')}>Aprovar setExpanded(true)}>Reprovar
{expanded && (
Autoridade: {req.authority} · SLA: {req.slaHours}h · Restante: {req.slaRemaining}h
Comentário obrigatório para valores acima de R$50k