function PageInventory({pushToast}){
const I = window.Icons;
const D = window.FLUXData;
const [tab, setTab] = React.useState('all');
const [selected, setSelected] = React.useState(null);
const filtered = D.skus.filter(s=>{
if(tab==='low') return s.stock < s.threshold;
if(tab==='out') return s.stock===0;
if(tab==='risk') return s.risk>0.6;
return true;
});
return (
<>
Inventario
6,842 SKUs activos en 8 tiendas. Reabastecimiento sugerido por IA, transferencias inter-tienda y alertas de quiebre.
{[
{l:'Total SKUs', v:'6,842', d:'+124 este mes', icon:'Box'},
{l:'Valor inventario', v:'$48.2M', d:'+5.4% vs. anterior', icon:'Database'},
{l:'Stock crítico', v:'42', d:'requieren acción', icon:'Alert', color:'red'},
{l:'Rotación promedio', v:'21 días', d:'-2 días vs. anterior', icon:'Refresh'},
].map((k,i)=>{
const Ic = I[k.icon];
return (
);
})}
Recomendación IA
Mover 25 unidades de SKU-8872 desde GDL → MTY equilibraría inventario y evitaría quiebre con 88% de probabilidad.
pushToast('Transferencia programada')}>Ejecutar
Ignorar
setTab('all')}>Todos {D.skus.length}
setTab('low')}>Stock bajo {D.skus.filter(s=>s.stock
setTab('out')}>Sin stock {D.skus.filter(s=>s.stock===0).length}
setTab('risk')}>Riesgo de quiebre {D.skus.filter(s=>s.risk>0.6).length}
Filtrar
Importar CSV
Nuevo SKU
SKU Producto Categoría Tienda Stock Mín. Vendido (30d) Tendencia Riesgo IA Acciones
{filtered.map(s=>{
const sparkData = Array.from({length:8},(_,i)=>Math.max(0,s.sold30/8 + Math.sin(i)*15 + (Math.random()*10-5)));
return (
setSelected(s)} style={{cursor:'pointer'}}>
{s.sku}
{s.name}
{s.category}
{s.store}
{s.stock}
{s.threshold}
{s.sold30}
0.7?'var(--red)':s.risk>0.4?'var(--amber)':'var(--green)'}}/>
{Math.round(s.risk*100)}%
{e.stopPropagation();pushToast(`Reabasto solicitado para ${s.sku}`)}}>Reabastecer
);
})}
{selected && (
setSelected(null)}>
e.stopPropagation()}>
{selected.sku}
{selected.name}
Editar
setSelected(null)}>
Precio
${selected.price.toLocaleString()}
Riesgo
{Math.round(selected.risk*100)}%
Sugerencia Solicitar {Math.max(50, Math.round(selected.forecast30 - selected.stock))} u. a {selected.supplier} para cubrir demanda proyectada de 30 días.
{pushToast('Orden de compra creada');setSelected(null)}}>Crear OC
)}
>
);
}
window.PageInventory = PageInventory;