# Datos de la demo · RADAR v3

Los seis indicadores de Compras son **ilustrativos**, definidos en `documentacion/RADAR.md`, sección «Secciones (v3, 18 sep 2026)». No representan mediciones de un cliente, benchmarks ni compromisos de resultado. Se presentan en `findings.mjs` y no alimentan la calculadora.

## Procedencia de los seis indicadores

| Indicador | Valor mostrado | Relación con `documentacion/SUPUESTOS.md` |
|---|---|---|
| De solicitud a orden de compra | 3.4 días de media | Nuevo ejemplo de RADAR. **No procede de SUPUESTOS** ni se calcula a partir de sus recorridos. |
| Materiales sin movimiento en 12 meses | 33.9 % del valor | Derivado del escenario de antigüedad conservado, no de una tasa escrita en SUPUESTOS. Véase el cálculo siguiente. |
| Solicitudes que ya tenían existencias | 12 % | Nuevo ejemplo de RADAR. **No procede de SUPUESTOS**. Es una proporción de solicitudes, no el porcentaje de gasto evitable de la calculadora. |
| Órdenes con entrega fuera de fecha | 18 % | Nuevo ejemplo de RADAR. **No procede de SUPUESTOS** ni del caso individual de urea. |
| Compras urgentes sobre el total | 9 % | Nuevo ejemplo de RADAR. **No procede de SUPUESTOS**. Describe frecuencia de compras, no sobrecoste evitable. |
| Referencias con reserva caducada | 1 de cada 14 | Nuevo ejemplo de RADAR. **No procede de SUPUESTOS**. No se extrapola desde los 12 filtros de una OT cancelada. |

La antigüedad usa valor monetario, no unidades ni número de referencias. Las bandas originales de `web/operations.mjs` (`ageBands`, solo consultado) suman USD 3.15 M, 2.4 M, 0.95 M y 1.9 M sobre USD 8.4 M. Redondeadas: 37.5 / 28.6 / 11.3 / 22.6 %. Las dos últimas suman USD 2.85 M: `2.85 / 8.4 × 100 = 33.92857… %`, mostrado como **33.9 %**. SUPUESTOS documenta USD 8.4 M, USD 1.9 M sin salida de más de 18 meses y el criterio de valor; no documenta por sí solo el tramo de USD 0.95 M ni el porcentaje de más de un año.

## Hallazgos, comparación y ahorro

Se conservan los tres hallazgos de la demo: USD 1.9 M sin salida de más de 18 meses; 12 filtros reservados a una OT cancelada (recepción hace 21 días); urea con seis días de cobertura. Los casos y saldos proceden del escenario ilustrativo existente. En la propuesta del antes/después, los ocho filtros libres son el saldo **al finalizar** la liberación de 12 y la reserva de 10 para nuevas necesidades. USD 4,320 es compromiso evitado en ese caso, no ahorro anual añadido.

«7 saltos · 3 días» y «1 decisión · minutos» son el contraste narrativo ilustrativo solicitado por RADAR, no una medición ni la media de 3.4 días de los indicadores. La ruta incluye siete saltos reales: SAP → Excel → WhatsApp → Correo → Llamadas → Papel → Excel → SAP.

El ahorro sigue calculándose exclusivamente con `model.mjs`. Por defecto, **USD 279,000 de ahorro bruto al año**, suma de tres partidas: USD 180,000 de compras evitables (1.5 % de los USD 12 M de gasto) + USD 45,000 de coste de posesión evitado (20 % de los USD 225,000 de caja puntual) + USD 54,000 de urgencias evitadas (0.45 % de los USD 12 M). `180,000 + 45,000 + 54,000 = 279,000`. Se conservan el 1.5 % del gasto en compras evitables y el 0.45 % del gasto por sobrecostes de urgencias evitables. **No se sustituyen por el 12 % ni el 9 %** de los indicadores. La caja puntual potencial permanece separada del ahorro anual. `urea.mjs` y `documentacion/SUPUESTOS.md` no se modifican.

**La demo ya no muestra precio ni retorno neto (21 sep 2026, decisión del CTO).** La tarifa de Flow AI se trata en la conversación comercial, no en la página: la calculadora pedía al visitante rellenar «Implantación única» (USD 120,000) y «Operación · USD al año» (USD 72,000) —una tarifa que no le corresponde adivinar— y de ahí derivaba USD 207,000 netos y una recuperación en siete meses. Desaparecen los dos controles, el neto, la recuperación, la línea punteada «Inversión + operación» de la curva a tres años y el marcador «Coste del año 1» del gráfico de escenarios. El titular pasa de «USD 207,000 netos al año» a **«USD 279,000 de ahorro bruto al año»**: es la misma cifra que la sección ya mostraba en la casilla «Ahorro bruto anual» de la rejilla, que por eso se sustituye por «Inventario considerado». La sección se titula «Estima el ahorro.» y el enlace del nav, «Ahorro» (el `id` sigue siendo `retorno`).

**Inventario en almacén · a coste (deslizador, nuevo el 21 sep 2026).** Por defecto **USD 8.4 M**, que es exactamente `inventory().current`: la suma de la columna `current` de las doce filas de `families` en `model.mjs`, la misma cifra de inventario que usan `SUPUESTOS.md` y el 33.9 % de antigüedad. Recorrido de USD 1 M a USD 40 M, paso de USD 100,000. `calculate()` deriva `scale = inventoryValue / inventory().current` y con él escalan **las partidas que dependen del stock**: el stock lento reducible (`slowBase`, USD 900,000 en el valor por defecto) y, detrás de él, la caja puntual potencial y el coste de posesión evitado; también la base de la meta de reducción (USD 1.45 M por defecto). Las partidas que dependen del gasto —compras evitables y urgencias— no se tocan. Como caja y meta escalan con el mismo factor, el porcentaje de «Meta de reducción cubierta» **no se mueve** al mover el inventario (15.5 % con los valores por defecto): cambia el importe, no la proporción. *Motivo:* hasta el 21 sep esas dos partidas salían de un inventario fijo que ningún control de la sección tocaba, así que con el gasto anual al mínimo la demo seguía prometiendo USD 45,000 de coste de posesión evitado. Por la misma razón el **gasto anual ya no puede bajar de USD 1 M**.

## Antes / Después · tres escenarios (18 sep 2026, ampliado el 21 sep 2026)

La sección reproduce tres escenarios encadenados y seleccionables. El motor es `compare.mjs`; los datos y los textos viven en `compare-scenarios.mjs`. Las pestañas se generan desde ese array, de modo que la duración total (`TOTAL_MS = scenarios.length × SCENE_MS`, hoy 28.500 ms) y el número de botones salen del propio array y no del HTML.

**Escenario 1 · «Entra una solicitud de compra».** No añade ninguna cifra nueva. Reutiliza literalmente el caso de filtros que ya estaba en la demo: SOL-731, 24 filtros, 12 reservados a la OT-688 cancelada, Almacén 02, ocho libres al finalizar y USD 4,320 de compromiso evitado (ver «Hallazgos, comparación y retorno», más arriba). El desenlace del panel «Antes», «Compra 24 · sin ver los 12 que ya estaban reservados», es la traducción del texto del paso «Solicitud» de `flow.mjs`: «compra sin ver la reserva cancelada». Los siete saltos y el «3 días» son el mismo contraste narrativo de siempre.

**Escenario 2 · «Falta urea y nadie lo pidió».** Ninguna cifra está escrita a mano. `compare-scenarios.mjs` hace `calculateUrea(initialUrea())` al cargar y toma de ahí todos los números:

| Dato mostrado | Valor | De dónde sale |
|---|---|---|
| 1,500 sacos | 1,500 | `urea.stock` |
| 250 al día | 250 | `c.demand` (consumo inicial de `initialUrea()`) |
| 6 días de cobertura | 6 | `c.daysLeft` = `urea.stock / demand` |
| Llega en 4 días | 4 | `c.supplier.days` del proveedor regional |
| Pedir 3,000 sacos | 3,000 | `c.quantity`, que coincide con `c.recommended` |
| 14 días tras recibir | 14 | `c.coverAfter` |
| OC-608 sin fecha: excluida | OC-608 | `urea.pendingOrder` |
| Proveedor regional | — | `c.supplier.name` |
| USD 4,500 de prima de urgencia | 4,500 | `(suppliers.express.price − c.supplier.price) × c.quantity` = `(33 − 31.5) × 3,000`, formateado con `money()` |

Los miles se formatean con `toLocaleString('en-US')`, igual que en `agent.mjs`. `urea.mjs` **no se modifica**: la sección solo lo lee.

**Lo que es ilustrativo y no es una medición.** «Compra exprés · en el mejor de los casos» y «Peor caso · la operación se detiene» son los dos desenlaces narrativos del escenario sin agente; no proceden de ningún registro ni de `SUPUESTOS.md`, y no cuantifican paradas de planta. Los siete saltos del panel «Antes» (conteo físico, cruce de consumo, búsqueda de la OC pendiente, consulta a Agrícola, aprobación urgente, proveedor exprés y registro) son un recorrido de ejemplo, no un procedimiento observado en un cliente. Los USD 4,500 son el sobrecoste evitado **en esta compra concreta** por no recurrir al proveedor exprés: no son ahorro anual, no se suman al retorno de `model.mjs` ni se extrapolan. Los tiempos de la animación (14 s por escenario, que se reproduce una vez y se detiene, con un salto cada 1,8 s en el panel «Antes») son puesta en escena, no duraciones del proceso real: que el lado del agente termine antes indica que hace menos pasos, no que se hayan medido minutos.

**Escenario 3 · «El mínimo que compra de más».** Corrige la regla que genera los dos casos anteriores: el parámetro de reposición del mismo filtro de la SOL-731. Engancha con el paso «MRP / Comprador» de `flow.mjs`, cuyo defecto declarado es «repone sin demanda».

| Dato mostrado | Valor | De dónde sale |
|---|---|---|
| El artículo | Filtro de la SOL-731 | Mismo caso de filtros del escenario 1 y de `agent.mjs`. **No añade un artículo nuevo.** |
| 12 % de solicitudes con existencias | 12 % | Reutilizaba el indicador de `findings.mjs` con **el mismo sentido**: proporción de solicitudes que ya tenían existencias. **Retirado de la tarjeta el 21-sep** para dejar sitio al plazo de entrega; sigue mostrándose en `findings.mjs`. |
| «repone sin demanda» | — | Texto del paso `mrp` de `flow.mjs`, traducido al desenlace «Mientras tanto, el MRP sigue reponiendo contra el mismo mínimo». |
| Mínimo actual 20 | 20 | **Ilustrativo.** Supuesto declarado en `compare-scenarios.mjs` (`filtro.min`). |
| Consumo 6 al mes | 6 | **Ilustrativo.** Supuesto declarado (`filtro.consumoMes`). Tamaño verosímil de taller, no una medición. |
| Plazo de entrega 21 días | 21 | **Ilustrativo.** Supuesto declarado (`filtro.plazoDias`): lo que tarda el proveedor en servir ese filtro, tres semanas. |
| Stock de seguridad 20 días | 20 | **Ilustrativo.** Supuesto declarado (`filtro.seguridadDias`): margen sobre el plazo, no una medición de variabilidad de la demanda. |
| Mínimo propuesto 8 | 8 | **Derivado**, no escrito: `Math.round(consumoMes × 12 / 365 × (plazoDias + seguridadDias))` = `round(0,197 × 41)` = 8. Es un punto de pedido: plazo de entrega más stock de seguridad. |
| 5 veces el plazo | 5 | **Derivado**: `min / (consumoDia × plazoDias)` = `20 / 4,14` = 4,8 → 5. Cuántas veces cubre el plazo de entrega el mínimo de hoy. |

**Lo que NO se ha hecho.** No hay ningún importe de ahorro anual, ningún porcentaje nuevo, ningún recuento de artículos del maestro (el contador dice «y el maestro sin tocar», sin cuantificarlo) y ninguna referencia a un cliente real. El desenlace de la tarjeta, «Menos caja parada · sin bajar la cobertura del plazo», describe la dirección del efecto sin cuantificarlo: no se suma al retorno de `model.mjs` ni al 33.9 % de inventario sin movimiento, que sigue siendo valor de inventario y se muestra solo en `findings.mjs`.

**Frecuencia de reposición: no se menciona.** El mínimo es el punto de pedido: fija cuánto stock se mantiene, no cada cuánto se compra (eso depende del tamaño de lote y del consumo). Por eso los textos hablan de stock parado en estantería y no de reposiciones al mes o al año, y el desenlace dice que el MRP «sigue reponiendo contra el mismo mínimo». Un recuento de reposiciones inventado sería además una cifra sin respaldo. Se cuantifica solo lo derivable: las 5 veces que el mínimo de hoy cubre el plazo de entrega. **El mínimo propuesto se dimensiona como un punto de pedido estándar —plazo de entrega más stock de seguridad— y por eso la tarjeta ya no habla de «cobertura objetivo»:** la cifra anterior salía de una cobertura elegida a dedo, mientras que 21 + 20 dice de dónde sale cada día de cobertura y deja claro que parte del mínimo es seguridad por diseño.

**Puesta en escena.** Los siete saltos del panel «Antes» (SAP → Excel → SAP → WhatsApp → Teams → Gmail → SAP) son un recorrido de ejemplo con cinco de las seis herramientas, no un procedimiento observado. El tercer salto era «Papel» hasta el 21-sep: el maestro de materiales vive en SAP, así que revisar el mínimo es volver a SAP, no bajar a un archivador. El trazado dibujado (`before.route`) se corrigió en el mismo sentido. Los tiempos (14 s por escenario, razonamiento a 3,4 / 4,0 / 4,6 s y aprobación a 6,0 s) son puesta en escena.

**Qué hace la persona en cada salto (21 sep 2026).** Cada paso del panel «Antes» lleva una tercera frase que describe la acción de la persona: lo que el lado «Después» sustituye. Va en el propio paso, junto al nombre de la herramienta y un icono de persona; los pasos se revelan uno a uno, se quedan a la vista y el recorrido cierra con un resumen («Una persona, siete herramientas · y la respuesta estaba en la primera»; «Todo esto empieza porque alguien se dio cuenta a tiempo»; «Media mañana para un artículo · y el maestro entero detrás»). Son descripciones de trabajo administrativo, **no mediciones**: no hay minutos, ni coste por paso, ni número de personas implicadas. Los roles citados son genéricos (el comprador, el almacén, Agrícola, el administrador del maestro) salvo Laura, que ya aparecía como compradora en el panel de producto. La tarea corta de cada paso («Cruzar stock», «Consultar reserva») se conserva para lectores de pantalla, aunque ya no se muestre: la acción de la persona la sustituye en pantalla.

## Cobertura y contador del hero

El rótulo que flotaba sobre el lienzo del hero («5 departamentos · 44 flujos · 1.2 M de registros», `.detection-counter`) se retiró el 21 sep 2026: la misma información está en la franja de evidencia bajo la animación («Empresa de ejemplo · 5 departamentos conectados · 44 flujos identificados · 1.2 M registros») y en el paso 1 de Cobertura. El rótulo «Empresa de ejemplo» entró el 21 sep 2026, por la tarde, en lugar de la coletilla «· ejemplo ilustrativo»: dice antes de las cifras que son el tamaño de la empresa del ejemplo y no la cartera de NAX. Los **44 flujos** son las listas exactas de RADAR (12 de Compras y ocho en cada uno de los otros cuatro departamentos); RADAR pedía 47 y no se inventaron tres flujos adicionales. «1.2 M de registros» es contexto ilustrativo, no un recuento de datos cargados. Ni 47 ni 1.2 M proceden de SUPUESTOS.
