const { useState } = React; // ─── Lead time status ───────────────────────────────────────────────────────── function ltStatus(days) { if (days <= 7) return 'critical'; if (days <= 14) return 'at_risk'; return 'ok'; } // ─── Lead Time Row ──────────────────────────────────────────────────────────── function LeadTimeRow({ item, idx }) { const st = ltStatus(item.daysSlack); const col = statusColor(st); return (
{item.criticalPath && CC} {item.item}
{item.supplier} {item.country} = 16 ? C.danger : item.leadWeeks >= 10 ? C.warning : C.textSub }}>{item.leadWeeks} sem {item.poDeadline} {item.needDate}
{item.daysSlack}d
{item.criticalPath ? ⚠ Caminho crítico : Folga no cronograma } ); } // ─── Import Tracker Row ─────────────────────────────────────────────────────── function ImportRow({ imp }) { const radarOk = imp.radar === 'OK'; return ( {imp.bl} {imp.item} {imp.origin} {imp.eta}
RADAR {imp.radar}
); } // ─── Screen 6: Suprimentos / Lead Time ─────────────────────────────────────── function Screen6Supply() { const { criticalLeadTimes, importTracking } = window.SIGP_DATA; const [activeTab, setActiveTab] = useState('leadtimes'); const critical8 = criticalLeadTimes.filter(i => i.leadWeeks >= 8).length; const poAtraso = criticalLeadTimes.filter(i => i.poStatus === 'Não emitida' || i.poStatus === 'Cotação pendente').length; const semHedge = 2; // from currency exposure const janelaCrit = criticalLeadTimes.filter(i => i.daysSlack <= 7).length; return ( {/* ── KPIs ── */}
0?'critical':'ok'} />
{/* ── CRITICAL ALERT — Caldeira ── */}
🔴
JANELA CRÍTICA — CALDEIRA AQUATUBULAR 30t/h
Lead time: 22 semanas · Fornecedor: Hoval Brasil · Deadline PO: 30/05/2026 (7 dias)
Sem emissão da PO até 30/05, a data de necessidade (25/10/2026) não será atendida → atraso em cascata de toda a Fase 2 (Montagem Mecânica). Impacto: +22 semanas no Caminho Crítico.
alert('Abrindo fluxo de aprovação REQ-2852...')}>🚀 Aprovar PO Emergencial alert('Abrindo tela de autorizações...')}>Ver REQ-2852 na fila
{/* ── Tabs ── */}
{[{id:'leadtimes',label:'Lead Times Críticos'},{id:'imports',label:'Importações em Andamento'},{id:'janela',label:'Janela de Emissão PO'}].map(t => ( ))}
{/* ── Lead Times Tab ── */} {activeTab === 'leadtimes' && ( {criticalLeadTimes.map((item, i) => )}
Item / Equipamento Fornecedor País Lead Time Deadline PO Necessidade Status PO Folga Impacto
CC = Caminho Crítico · Um atraso nestes itens impacta diretamente a data de conclusão do projeto. Integração com Tela IAP para recomendações de hedge e compra antecipada.
)} {/* ── Imports Tab ── */} {activeTab === 'imports' && ( {importTracking.map((imp, i) => )}
BL / AWB Item Origem ETA Status Documentação Aduaneira RADAR
⚠ NLRTM2604221 — Medidores Coriolis com RADAR pendente. Risco de bloqueio aduaneiro. Acionar despachante Camex imediatamente.
)} {/* ── PO Window Tab ── */} {activeTab === 'janela' && (
{criticalLeadTimes.slice(0,6).map((item, i) => { const st = ltStatus(item.daysSlack); const col = statusColor(st); const pct = Math.min(100, (item.daysSlack / 90) * 100); return (
{item.item.substring(0,30)}{item.item.length>30?'…':''} {item.daysSlack}d de folga
Deadline: {item.poDeadline} · Lead: {item.leadWeeks} sem · {item.poStatus}
); })} {[ { item:'Caldeira Aquatubular 30t/h', deadline:'30/05 (7d)', action:'Emitir PO emergencial', status:'critical' }, { item:'Destilador GEA — 6 colunas', deadline:'15/06 (23d)', action:'Concluir negociação', status:'at_risk' }, { item:'Transformador Siemens 2MVA', deadline:'30/06 (38d)', action:'Aguardar aprovação REQ', status:'warning' }, { item:'Evaporador Dedini 5 efeitos', deadline:'20/07 (58d)', action:'Finalizar análise técnica',status:'ok' }, ].map((a, i) => (
{a.item}
{a.action}
{a.deadline}
))}
)} ); } Object.assign(window, { Screen6Supply });