/* global React, NavIcon, KB_ARTICLES, KB_SUGGESTIONS */ const { useState: useStateKB, useMemo: useMemoKB } = React; const CATEGORIES = ["Todos","Mantenimiento HW","Diagnóstico","Calidad","Consumibles","Conectividad","Operación"]; const BRANDS = ["Todas","HP","Canon"]; const KbScreen = () => { const [cat, setCat] = useStateKB("Todos"); const [brand, setBrand] = useStateKB("Todas"); const [selected, setSelected] = useStateKB(KB_ARTICLES[0]); const [q, setQ] = useStateKB(""); const filtered = useMemoKB(() => { return KB_ARTICLES.filter(a => (cat === "Todos" || a.category === cat) && (brand === "Todas" || a.brand === brand) && (q === "" || (a.title + " " + a.code + " " + a.models.join(" ")).toLowerCase().includes(q.toLowerCase())) ); }, [cat, brand, q]); const catCounts = useMemoKB(() => { const c = {}; KB_ARTICLES.forEach(a => { c[a.category] = (c[a.category] || 0) + 1; }); return c; }, []); return (
SOF.IA/Knowledge Base

Knowledge Base

{KB_ARTICLES.length} artículos · SOF.IA los consulta antes de proponer una solución
{/* SOF.IA suggestions */} {KB_SUGGESTIONS.map((s, i) => (
SOF.IA detectó {s.cases} casos similares sin artículo · "{s.title}"

{s.detail} · {s.period}

))}
{/* Filters */} {/* List + Detail */}
{filtered.map(a => (
setSelected(a)} >
{a.code}
{a.title}
{a.models.slice(0,2).join(" · ")}{a.models.length > 2 ? ` +${a.models.length-2}` : ""}
{a.uses}usos = 0.9 ? "success" : ""}`}>{Math.round(a.successRate*100)}%éxito {a.updated}
))} {filtered.length === 0 && (
Sin resultados para los filtros activos.
)}
{/* Detail */} {selected && selected.steps && (
{selected.code}

{selected.title}

Categoría: {selected.category} Tipo de falla: {selected.faultType} Última actualización: {selected.updated} Autor: {selected.author || "—"}
Tickets resueltos
{selected.uses}
Tasa de éxito
{Math.round(selected.successRate*100)}%
Tiempo medio app.
3.8 min

Modelos compatibles

{selected.models.map(m => ( {m} ))}

Procedimiento

{selected.steps.length} pasos
{selected.steps.map((s, i) => (
{i+1}
{s}
))}
{selected.parts && (

Repuestos requeridos

{selected.parts.length} items
Ref.
Descripción
Stock
{selected.parts.map(p => (
{p.ref}
{p.name}
{p.stock} u.
))}
)}
)} {selected && !selected.steps && (
{selected.title} Selecciona un artículo de la lista superior para ver el procedimiento completo. Este artículo aún no tiene su contenido extendido cargado en la demo.
)}
); }; window.KbScreen = KbScreen;