Auditoría técnica Motor de Compras 2.0
<!-- ESTADO-VIVO:INICIO -->
⚡ ÚLTIMO ESTADO VIVO (Actualizado: 2026-10-30 18:23 · Orden Cronológico Inverso: Más Nuevo Arriba)
- Zuelo (
1612, Mínimo207000p, Lead Time1,4 sem): Sugerido total413 unidadespor$3.701.500(O7 = 0,P7 = 🟢 SUPERA MÍNIMO). Desglose:ZOL50192 u($1.632.000),ORGZUEL96 u($816.000),ZUORG96 u($466.909),BOXZZ6 u($428.182),ZBOXX4 u($120.909),ZOORGNB4 u($120.909),ZUOLSS12 u(... - Laur (
1638, sin mínimo cargado, Lead Time6,5 sem): Se reparó enDatabase Productos -> Lista Productos(1XcqaEiGH7udI-dDfKFr1UkY6o3R2D3XsEyFnbifNCMI) laVIDA ÚTILen blanco de las filas3041:3051(J3041:J3051 = 730días), que forzaba0 semanas de seguridad. ConSemSeg = 1,3(1 + 0,3por LT > 1,5) +SemStk = 6,5=7,8 semanas...
<!-- ESTADO-VIVO:FIN -->
Fecha: 2026-10-30. Lectura directa de Google Sheets; no se modificaron las planillas ni sus selectores.
Dictamen
Las siete fórmulas solicitadas son idénticas, carácter por carácter, en Mauro 2.0, Gaspi y Caro. No se identificó dependencia circular en la cadena local revisada. No se certifica ausencia global de ciclos entre todos los libros externos: hay IMPORTRANGE y fuentes adicionales no recorridas exhaustivamente. No corresponde declarar ausencia de bordes ni cero errores generales.
Se leyeron todas las filas existentes de Cálculos (7506 Mauro; 7507 Gaspi/Caro), columnas A:AU. No hubo errores nativos en R/T/U/AE/AF/AU en esta lectura; sí 213 errores por libro en AS (Costo Compra), heredados de la fuente. Un error de costo elimina el piso mediante IFERROR; en O7/P7 se convierte en costo cero, pudiendo distorsionar mínimos monetarios sin alertarlo.
Revisión de las siete reglas
- R7: coincide. Base Combinación N, verificada aguas arriba como XLOOKUP a Lista Productos N. Riesgo usa AJ (ABC general), con umbrales estrictos: A LT=1 no suma; LT=1,5 suma 0,3; >1,5 suma 0,5. B LT=1,5 no suma; >1,5 suma 0,3. C no suma. LT viene redondeado hacia arriba a décimas de semana antes de aplicar umbrales.
- T7: coincide con MAX(LT, Combinación O) más días manuales N7 y automáticos O7, divididos por siete, solo para entidad N2 y ABC en marca EE distinto de C. Importante: O es FINAL SEMANAS DE STOCK desde Lista Productos Z; el rótulo frecuencia requiere que ese parámetro represente efectivamente frecuencia. Un ABC vacío o inválido también pasa el filtro distinto de C. N7 debe ser numérico; hoy es cero en las tres.
- U7: coincide como PISO, no como stock óptimo total. Si hay ventas, se toma el mayor entre piso y cálculo real. Vida útil menor a 90 (si no está vacía) o costo mayor a 3000 anulan el piso; 90 y 3000 exactos lo permiten. A/B reciben MIN(2*uxb,24), resto MIN(uxb,12). Usa AJ, ABC general, no EE en marca. Vida útil vacía permite el piso; costo vacío no se valida explícitamente como ausente. ABC inválido cae en rama C. UxBulto cero/negativo/no numérico carece de validación uniforme.
- AE7: coincide: SUMIF por AP suma AC (unidades madre, conversión de packs realizada aguas arriba), agrega V solo cuando es negativo, limita a cero y omite filas de packs NN-CODIGO. El sobrante se descuenta una vez por fila madre; IDs madre duplicados no están protegidos.
- AU7: reconstruye T/U/V/AE y el redondeo de AF con O7 automático eliminado, conservando N7 manual y reglas ML. No referencia T/U/V/AE/AF finales. Mantiene Sin Datos si necesidad y stock son cero. Esto rompe el retorno local del automático, pero no significa que sea base sin días manuales. Casos de datos ausentes son reconstruidos con vbase=0 y no constituyen equivalencia textual estricta a AF.
- Preparar OC O7: reconoce P/PESO/PESOS; U/UNIDAD/UNIDADES/PACK/PACKS; C/B/CAJA/CAJAS/BULTO/BULTOS; K/KG/KILO/KILOS; resto manual. actualBase=SUM(MAX(AU-pendiente,0)*mult); costo por ID desde Combinación U. tasaActiva usa ABC en marca A/B y rawBase>0; si es cero usa tasaTotal de todos los A/B listados. stepBox suma 0,5*uxb*mult para A/B con rawBase>0 y venta positiva. Días enteros hacia arriba, tope 30; cero para manual, objetivo no positivo, base suficiente o tasa no positiva.
- Preparar OC P7: contiene los cinco estados pedidos y verifica el sugerido final T, no AU. AUTO aparece solo si el final alcanza el objetivo y O7>0. Al alcanzar exactamente el objetivo muestra SUPERA (usa >=). Si tipo no reconocido muestra VER MÍNIMO con texto original. Si tipo es válido pero importe parseado es cero, puede mostrar SUPERA, aunque el texto sea inválido.
Bordes relevantes
- O7 y P7 cortan en fila 200: solo 191 productos, aunque la hoja llega a 263 y el sugerido usa columnas abiertas. Marcas con más filas quedan parcialmente excluidas. No había IDs en B201:B263 en los selectores observados; es riesgo latente.
- Parseo elimina TODOS los puntos antes de VALUE. Ejemplo determinístico: 1.5K se transforma en 15, no 1,5. Acepta cadenas de separadores como '..P' y obj puede caer a cero. Convierte coma a punto con locale es_ES: requiere prueba nativa específica de decimales antes de aprobar ese formato. No se probó escribiendo entradas en vivo.
- K suma KG y L como cantidad, y G/ML/CC divididos por mil. Equipara litros a kilos sin densidad; no es masa real para líquidos.
- El ajuste stepBox de media caja no garantiza el mínimo: AF descarta fracciones de caja menores que un tercio, con umbral en dos tercios; el error puede acercarse a dos tercios de caja. También hay sobrante y pendientes que generan tramos sin crecimiento. O7 estima días mediante pendiente lineal y no busca el primer día que realmente cumple; puede sobrar o faltar. P7 rojo evita afirmar cumplimiento cuando el resultado final no alcanza, pero no corrige los días.
- tasaActiva filtra rawBase>0, no sugBase>0 después de pendientes. No filtra G activo explícitamente. Con N6 mostrando desactivados puede incorporar productos no activos.
- Si tasaDia<=0 devuelve cero sin explicación en O7; P7 puede quedar rojo. Costo erróneo o desconocido se vuelve cero en mínimos monetarios.
- ABC general AJ gobierna seguridad y pisos; ABC en marca EE gobierna días y tasa. Es una diferencia desplegada real, no un error automáticamente: necesita conservarse como decisión explícita.
- El sugerido T tiene rama FRUTOS SECOS y ajuste T8, que O7 no replica. En esos modos la base automática puede diferir del resultado final.
Dependencias locales
O7 auto -> AU -> tbase (N7 manual, N2, LT, parámetro stock) + S/P/R + AC/AP y fuentes importadas. AU no retorna a O7 auto. T -> O7; U -> T; V -> U; AE -> V; AF -> AE/V; Preparar OC T -> AF; P7 -> Preparar OC T y O7. No hay retorno desde P7 hacia O7.
Los errores REF en AS no prueban circularidad: provienen del costo importado y no se expone mensaje causal completo en esta respuesta del conector.
Estado observado
Mauro: O7=0; SIN MÍNIMO. Gaspi (Zuelo): N3=207000p; O7=0; SUPERA MÍNIMO. Caro: O7=0; SIN MÍNIMO. Son los selectores actuales, no una prueba de todas las marcas ni de las cinco ramas del semáforo.
Evidencia primaria
- Mauro: https://docs.google.com/spreadsheets/d/1CVYvvOt-17_yj-JPJlBzn5reKexp66QMSYMAzto6_dk
- Gaspi: https://docs.google.com/spreadsheets/d/1zB6sbH2fUC_XmwUzJo7c1-sKza_hK4hMyt1aXCBkido
- Caro: https://docs.google.com/spreadsheets/d/1j5bBU7hoYNzLWi_mS9jAYRsVVacIpzjTJ-0SuOHxHo8
Fórmulas exactas leídas (iguales en los tres libros)
Cálculos!R7
=ArrayFormula({"Semanas de Seguridad";if(A8:A="";;let(base;'Combinación de Resultados'!N5:N;riesgo;if(AJ8:AJ="A";if(J8:J>1,5;0,5;if(J8:J>1;0,3;0));if(AJ8:AJ="B";if(J8:J>1,5;0,3;0);0));base+riesgo))})
Cálculos!T7
=ArrayFormula({"Semanas de Stock";if(A8:A="";;if(J8:J>'Combinación de Resultados'!O5:O;J8:J;'Combinación de Resultados'!O5:O)+if(((('Preparar OC'!$N$7+IFERROR(VALUE('Preparar OC'!$O$7);0))=0))+('Preparar OC'!$N$2<>E8:E)+('Combinación de Resultados'!EE5:EE="C");0;('Preparar OC'!$N$7+IFERROR(VALUE('Preparar OC'!$O$7);0))/7))})
Cálculos!U7
=ArrayFormula({"Stock Óptimo PLANT";if((A8:A="")+(O8:O="");;let(AB;(AJ8:AJ="A")+(AJ8:AJ="B");piso;if((AL8:AL<>"")*(AL8:AL<90);0;if(iferror((AS8:AS>3000);true);0;if(AB;if(H8:H>=12;24;H8:H*2);if(H8:H>=12;12;H8:H))));if(P8:P=0;piso;iferror(let(calculoreal;IFERROR(roundup(S8:S+P8:P*T8:T;0);"Sin Datos");if(piso>calculoreal;piso;calculoreal));piso))))})
Cálculos!AE7
=ArrayFormula({"Pedir ML";if(A8:A="";;if(mid(A8:A;3;1)="-";;let(resultado;SUMIF(AP8:AP;A8:A;AC8:AC)+if(V8:V<0;V8:V;0);if(resultado<0;0;resultado))))})
Cálculos!AU7
={"Sugerido Base 0d";ArrayFormula(IF((A8:A="")+(O8:O="");;let(tbase;if(J8:J>'Combinación de Resultados'!O5:O;J8:J;'Combinación de Resultados'!O5:O)+if(('Preparar OC'!$N$7=0)+('Preparar OC'!$N$2<>E8:E)+('Combinación de Resultados'!EE5:EE="C");0;'Preparar OC'!$N$7/7);AB;(AJ8:AJ="A")+(AJ8:AJ="B");piso;if((AL8:AL<>"")*(AL8:AL<90);0;if(iferror((AS8:AS>3000);true);0;if(AB;if(H8:H>=12;24;H8:H*2);if(H8:H>=12;12;H8:H))));ubase;if(P8:P=0;piso;iferror(let(calculoreal;IFERROR(roundup(S8:S+P8:P*tbase;0);"Sin Datos");if(piso>calculoreal;piso;calculoreal));piso));vbase;if((mid(A8:A;3;1)="-")+(P8:P="Sin Datos")+(ubase="Sin Datos");0;ubase-(if(Q8:Q-J8:J*P8:P<0;0;Q8:Q-J8:J*P8:P)));necplant;IF(vbase<0;0;vbase);necml;IF(mid(A8:A;3;1)="-";0;let(res;SUMIF(AP8:AP;A8:A;AC8:AC)+if(vbase<0;vbase;0);if(res<0;0;res)));nectotal;necplant+necml;IF(((nectotal=0)*(Q8:Q=0))+((P8:P="Sin Datos")*(nectotal=0));"Sin Datos";IF(nectotal=0;0;IF(nectotal<(H8:H/3*2);roundup(nectotal);IFERROR((nectotal/H8:H-let(resto;MOD(nectotal/H8:H;1);IF(resto<1/3;resto;-1+resto)))*H8:H;roundup(nectotal))))))))}
Preparar OC!O7
=ARRAYFORMULA(IF(OR(N3="";N3="0";N3=0;N3="-");0;LET(raw;UPPER(TRIM(TO_TEXT(N3)));tipo;IF(REGEXMATCH(raw;"^[0-9.,]+\s*(P|PESOS?)$");"P";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(U|UNIDADES?|PACKS?)$");"U";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(C|B|CAJAS?|BULTOS?)$");"C";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(K|KG|KILOS?)$");"K";"M"))));obj;IF(tipo="M";0;IFERROR(VALUE(SUBSTITUTE(SUBSTITUTE(REGEXEXTRACT(raw;"^[0-9.,]+");".";"");",";"."));0));rawBase;IFERROR(VALUE(XLOOKUP(B10:B200;'Cálculos'!A:A;'Cálculos'!AU:AU;0;0));0);pend;IFERROR(VALUE(Z10:Z200);0);uxb;IF(IFERROR(VALUE(X10:X200);1)<=0;1;IFERROR(VALUE(X10:X200);1));sugBase;IF((rawBase-pend)<=0;0;rawBase-pend);costoU;IFERROR(VALUE(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!U:U;0;0));0);cantU;IFERROR(VALUE(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!G:G;0;0));0);unidU;UPPER(TRIM(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!H:H;"";0)));pesoU;IF((unidU="KG")+(unidU="L");cantU;IF((unidU="G")+(unidU="ML")+(unidU="CC");cantU/1000;0));mult;IF(tipo="P";costoU;IF(tipo="U";1;IF(tipo="C";1/uxb;IF(tipo="K";pesoU;0))));actualBase;SUM(sugBase*mult);esAB;(AE10:AE200="A")+(AE10:AE200="B");vtaDia;IF(esAB>0;IFERROR(VALUE(Q10:Q200)/7;0);0);tasaActiva;SUM(IF(rawBase>0;vtaDia*mult;0));tasaTotal;SUM(vtaDia*mult);tasaDia;IF(tasaActiva>0;tasaActiva;tasaTotal);stepBox;SUM(IF((esAB>0)*(rawBase>0)*(vtaDia>0);0,5*uxb*mult;0));IF(OR(tipo="M";obj<=0;actualBase>=obj;tasaDia<=0);0;MIN(30;CEILING((obj-actualBase+stepBox)/tasaDia;1))))))
Preparar OC!P7
=ARRAYFORMULA(IF(OR(N3="";N3="0";N3=0;N3="-");"🟢 SIN MÍNIMO";LET(raw;UPPER(TRIM(TO_TEXT(N3)));tipo;IF(REGEXMATCH(raw;"^[0-9.,]+\s*(P|PESOS?)$");"P";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(U|UNIDADES?|PACKS?)$");"U";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(C|B|CAJAS?|BULTOS?)$");"C";IF(REGEXMATCH(raw;"^[0-9.,]+\s*(K|KG|KILOS?)$");"K";"M"))));obj;IF(tipo="M";0;IFERROR(VALUE(SUBSTITUTE(SUBSTITUTE(REGEXEXTRACT(raw;"^[0-9.,]+");".";"");",";"."));0));sugActual;IFERROR(VALUE(T10:T200);0);uxb;IF(IFERROR(VALUE(X10:X200);1)<=0;1;IFERROR(VALUE(X10:X200);1));costoU;IFERROR(VALUE(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!U:U;0;0));0);cantU;IFERROR(VALUE(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!G:G;0;0));0);unidU;UPPER(TRIM(XLOOKUP(B10:B200;'Combinación de Resultados'!A:A;'Combinación de Resultados'!H:H;"";0)));pesoU;IF((unidU="KG")+(unidU="L");cantU;IF((unidU="G")+(unidU="ML")+(unidU="CC");cantU/1000;0));mult;IF(tipo="P";costoU;IF(tipo="U";1;IF(tipo="C";1/uxb;IF(tipo="K";pesoU;0))));actualTotal;SUM(sugActual*mult);IF(tipo="M";"⚪ VER MÍNIMO ("&N3&")";IF(actualTotal>=obj;IF(IFERROR(VALUE(O7);0)>0;"🟡 AUTO +"&O7&"d (LLEGA AL MÍNIMO)";"🟢 SUPERA MÍNIMO");"🔴 NO LLEGA AL MÍNIMO ("&TEXT(actualTotal/IF(obj<=0;1;obj);"0%")&")")))))
Cierre E2E en Vivo (18:22 hs) + Zuelo / Laur + Borrador #D41
- Auditoría Cruzada Multi-Modelo (
Regla #8): - Claude Opus (
claude-opus-5-5): Session IDae6fadfe-70d2-4187-8067-05acd340e857 - OpenAI Codex (
gpt-6.1-sol): Session ID01a18eab-faf9-76b2-8c61-783adf675a6e - Mejoras Aplicadas en Vivo tras Auditoría Codex:
- Rango en
Preparar OC!O7:P7ampliado de10:200a10:260(cubriendo la totalidad de filas dePreparar OC). - Filtro de ABC en marca en
Cálculos!T7yAU7endurecido a(('Combinación de Resultados'!EE5:EE<>"A")*('Combinación de Resultados'!EE5:EE<>"B"))para excluir tantoCcomo celdas sin clasificación. tasaActivaystepBoxenO7filtrados sobresugBase > 0(neto de órdenes pendientes).- Verificación en Vivo en
Gestión de Pedidos Plant - Gaspi(1zB6sbH2fUC_XmwUzJo7c1-sKza_hK4hMyt1aXCBkido): - Zuelo (
1612, Mínimo207000p, Lead Time1,4 sem): Sugerido total413 unidadespor$3.701.500(O7 = 0,P7 = 🟢 SUPERA MÍNIMO). Desglose:ZOL50192 u($1.632.000),ORGZUEL96 u($816.000),ZUORG96 u($466.909),BOXZZ6 u($428.182),ZBOXX4 u($120.909),ZOORGNB4 u($120.909),ZUOLSS12 u($102.000),ZOLIOO3 u($14.591, ya no pide 36 u por falso piso C),ZOLINT0 u(stock106 u). - Laur (
1638, sin mínimo cargado, Lead Time6,5 sem): Se reparó enDatabase Productos -> Lista Productos(1XcqaEiGH7udI-dDfKFr1UkY6o3R2D3XsEyFnbifNCMI) laVIDA ÚTILen blanco de las filas3041:3051(J3041:J3051 = 730días), que forzaba0 semanas de seguridad. ConSemSeg = 1,3(1 + 0,3por LT > 1,5) +SemStk = 6,5=7,8 semanastotales, el Motor 2.0 sugiere444 unidadespor$2.677.882:500MLLA(Virgen Extra 500 ml)252 u(42 cajas x 6,$1.870.213, antes210 u) yLAUROORG(Orgánico 250 ml)192 u(16 cajas x 12,$807.669, antes168 u); el resto de los SKUs tienen OC pendientes en tránsito (24a84 u). - Prueba de Convergencia Automática de Mínimos (
O7+P7): ALMADRE(60c):O7 = 3,P7 = 🟡 AUTO +3d (LLEGA AL MÍNIMO)CHIA GRAAL(2500000p):O7 = 3,P7 = 🟡 AUTO +3d (LLEGA AL MÍNIMO)ENTRENUTS(2000000p):O7 = 5,P7 = 🟡 AUTO +5d (LLEGA AL MÍNIMO)ZUELO(207000p):O7 = 0,P7 = 🟢 SUPERA MÍNIMO- Borrador Instructivo Lunes 08:00 hs (
#D41): - Creado en
gabriel@plant.com.ar(draftId: r-7413093794029552093,messageId: 1a18eaca4572d588) paracarolina.italiano@plant.com.ar,gaspar@plant.com.ar,nicolas.santesteban@plant.com.arymauro.stoessel@plant.com.ar, con asunto *"Nuevo Motor de Compras 2.0 activo en las planillas de Gestión de Pedidos"*.
Temas/auditoria-tecnica-motor-compras-2-0-2026-10-30