// DemoStock.jsx — auto-looping demo: stock inteligente (IA local). // Timeline ~10s: stock do cimento esgota-se → alerta IA com previsão de rutura // → cursor clica "Criar ordem de compra" → OC criada + chip "+400 a caminho". (function () { const STR = { pt: { stOk: 'OK', stLow: 'Baixo', stCrit: 'Crítico', unit: 'un', winTitle: 'Armazém · Stock', iaBadge: 'Alertas de stock', colItem: 'Artigo', colStock: 'Stock', colStatus: 'Estado', prodCement: 'Cimento CEM II 32,5N · 25 kg', prodSand: 'Areia fina 0/4 · big bag', prodBrick: 'Tijolo cerâmico 30×20×15', onTheWay: '+400 a caminho', alertTitle: 'Stock mínimo atingido', alertRate: '· consumo 68 un/dia', alertSuggestion: 'Repor: 400 un · Cimpor, S.A. — entrega 48 h', btnCreatePO: 'Criar ordem de compra', ocCreated: 'criada · 400 un · Cimpor, S.A.', delivery48: 'entrega 48 h', toast: 'Ordem de compra enviada ao fornecedor', }, en: { stOk: 'OK', stLow: 'Low', stCrit: 'Critical', unit: 'pcs', winTitle: 'Warehouse · Stock', iaBadge: 'Stock alerts', colItem: 'Item', colStock: 'Stock', colStatus: 'Status', prodCement: 'Cement CEM II 32,5N · 25 kg', prodSand: 'Fine sand 0/4 · big bag', prodBrick: 'Ceramic brick 30×20×15', onTheWay: '+400 on the way', alertTitle: 'Below minimum stock', alertRate: '· usage 68 pcs/day', alertSuggestion: 'Reorder: 400 pcs · Cimpor, S.A. — 48 h delivery', btnCreatePO: 'Create purchase order', ocCreated: 'created · 400 pcs · Cimpor, S.A.', delivery48: '48 h delivery', toast: 'Purchase order sent to the supplier', }, es: { stOk: 'OK', stLow: 'Bajo', stCrit: 'Crítico', unit: 'ud', winTitle: 'Almacén · Stock', iaBadge: 'Alertas de stock', colItem: 'Artículo', colStock: 'Stock', colStatus: 'Estado', prodCement: 'Cemento CEM II 32,5N · 25 kg', prodSand: 'Arena fina 0/4 · big bag', prodBrick: 'Ladrillo cerámico 30×20×15', onTheWay: '+400 en camino', alertTitle: 'Stock mínimo alcanzado', alertRate: '· consumo 68 ud/día', alertSuggestion: 'Reponer: 400 ud · Cimpor, S.A. — entrega en 48 h', btnCreatePO: 'Crear orden de compra', ocCreated: 'creada · 400 ud · Cimpor, S.A.', delivery48: 'entrega 48 h', toast: 'Orden de compra enviada al proveedor', }, }; function chipFor(stock, s) { if (stock >= 300) return { cls: 'bg-zinc-100 border-zinc-200 text-zinc-500', label: s.stOk }; if (stock >= 150) return { cls: 'bg-amber-50 border-amber-200 text-amber-700', label: s.stLow }; return { cls: 'bg-red-50 border-red-200 text-red-700', label: s.stCrit }; } function StockRow({ name, sku, stock, max, chip, extra, unit }) { const pct = Math.max(3, Math.round((stock / max) * 100)); const barColor = pct > 50 ? '#A1A1AA' : pct > 20 ? '#F59E0B' : '#EF4444'; return (
{name}
{sku}
{stock.toLocaleString('pt-PT')} {unit}
{extra || ( {chip.label} )}
); } function DemoStock() { const lang = (window.__DEMO_LANG === 'en' || window.__DEMO_LANG === 'es') ? window.__DEMO_LANG : 'pt'; const s = STR[lang]; const D = 10000; const t = window.useDemoLoop(D, 8300); const { dkProg, dkEase, dkCursor } = window; const { DemoCursor, DemoToast, MiniWindow, DemoStage } = window; const stock1 = Math.round(600 - 536 * dkEase(dkProg(t, 600, 2600))); const alertOn = t >= 3000; const ordered = t >= 5400; const toast = t >= 5900 && t < 9300; const cur = dkCursor(t, [ { at: 0, x: 540, y: 390, hidden: true }, { at: 4100, x: 540, y: 390 }, { at: 4350, x: 442, y: 290 }, { at: 6600, x: 540, y: 390, hidden: true }, ], [5200]); const iaBadge = ( {s.iaBadge} ); return (
{s.colItem}{s.colStock}{s.colStatus}
{s.onTheWay} ) : null} />
{alertOn && !ordered && (
{s.alertTitle} {s.alertRate}
{s.alertSuggestion}
)} {ordered && (
OC-2026-0118 {s.ocCreated}
{s.delivery48}
)}
); } window.DemoStock = DemoStock; })();