https://claude.ai/public/artifacts/f6ac67c1-783e-48ab-9326-bae384b0ede8
Herramienta operativa para conteo físico de inventario. Un operador escanea cajas una por una. Cada escaneo introduce un identificador en la columna B de la hoja activa. Las fórmulas en esa misma hoja validan en tiempo real si la caja existe en el sistema ERP y si ya fue escaneada previamente.
- Hoja BASE: Descarga directa del ERP. Contiene el catálogo completo de cajas esperadas.
- Columna B: Identificador único de caja (ej.
CAJA-001) - Columna H: Dato a verificar (ej. número de bultos, descripción, cantidad esperada)
- Columna B: Identificador único de caja (ej.
- Hoja RESULTADO: Hoja de trabajo activa durante el conteo físico.
- Columna B (filas 4–100): Identificadores escaneados en campo
- Columna A:
=CONTAR.SI($B$4:$B$100, B{fila})— detecta repeticiones - Columna C:
=IFERROR(BUSCARV(B{fila}, BASE!$B:$H, 7, 0), "")— trae dato de BASE - Columna F:
=SI(A{fila}>1, "Repetida", "OK")— alerta de duplicado
El script insertarFormulas() (Apps Script) crea la hoja RESULTADO e inserta las tres fórmulas anteriores en cada fila del rango 4–100. No procesa datos; solo escribe fórmulas. La evaluación real la hace Google Sheets en tiempo de ejecución.
Crear un segundo script Apps Script (probarFormulas()) que:
- Prepare datos de prueba controlados en las hojas BASE y RESULTADO
- Espere a que Google Sheets recalcule las fórmulas
- Lea los valores resultantes en columnas A, C y F
- Compare contra los valores esperados definidos en los casos de prueba
- Genere un reporte PASS/FAIL en una hoja llamada
TEST_REPORT - Limpie los datos de prueba insertados (dejando las fórmulas intactas)
- Precondición:
BASE!B2 = "CAJA-001",BASE!H2 = "24 piezas" - Acción: Escribir
"CAJA-001"enRESULTADO!B4 - Esperado:
RESULTADO!A4=1RESULTADO!C4="24 piezas"RESULTADO!F4="OK"
- Precondición: Misma BASE del CT-01.
RESULTADO!B4 = "CAJA-001"ya escrito. - Acción: Escribir
"CAJA-001"también enRESULTADO!B5 - Esperado:
RESULTADO!A4=2(CONTAR.SI se recalcula sobre todo el rango)RESULTADO!A5=2RESULTADO!F4="Repetida"RESULTADO!F5="Repetida"
- Precondición: BASE no contiene
"CAJA-999" - Acción: Escribir
"CAJA-999"enRESULTADO!B6 - Esperado:
RESULTADO!A6=1RESULTADO!C6=""(IFERROR devuelve vacío)RESULTADO!F6="OK"
- Precondición:
RESULTADO!B7está vacía - Esperado:
RESULTADO!A7=0o1(CONTAR.SI cuenta celdas vacías — ver nota)RESULTADO!C7=""RESULTADO!F7="OK"o""según comportamiento real
Nota para el líder de equipo: El comportamiento de
CONTAR.SIcon celdas vacías puede variar. SiA7cuenta los vacíos como ocurrencias, puede ser necesario ajustar la fórmula de la columna F para excluir filas donde B está vacía:
=SI(B{fila}="", "", SI(A{fila}>1, "Repetida", "OK"))
Este caso de prueba sirve precisamente para detectar si ese ajuste es necesario.
- Precondición: BASE contiene
"CAJA-002"en dos filas distintas (duplicado en origen) - Acción: Escribir
"CAJA-002"enRESULTADO!B8 - Esperado:
RESULTADO!C8devuelve el valor H de la primera coincidencia (comportamiento estándar de BUSCARV) - Propósito: Documentar comportamiento, no necesariamente un error
Los siguientes casos están identificados pero requieren confirmación antes de implementarse:
- CT-06: Identificador con espacios o mayúsculas inconsistentes (
"caja-001"vs"CAJA-001") — ¿debe ser sensible a mayúsculas? - CT-07: Identificador con caracteres especiales o espacios al inicio/fin (error de escaneo)
- CT-08: Escaneo en fila 100 (límite del rango) — verificar que CONTAR.SI lo incluye correctamente
- CT-09: Más de 2 ocurrencias del mismo identificador — ¿la alerta "Repetida" es suficiente o se necesita el conteo exacto visible?
1. SETUP
- Leer/crear hoja BASE con datos de prueba (filas 2–N)
- Verificar que hoja RESULTADO existe y tiene fórmulas en A4, C4, F4
- Registrar estado inicial
2. EJECUCIÓN DE CASOS
Para cada caso de prueba:
a. Escribir datos de entrada en RESULTADO!B{fila}
b. Llamar SpreadsheetApp.flush() para forzar recálculo
c. Leer valores resultantes de A{fila}, C{fila}, F{fila}
d. Comparar contra esperado
e. Registrar PASS o FAIL con detalle
3. REPORTE
- Crear/limpiar hoja TEST_REPORT
- Escribir tabla: Caso | Descripción | Entrada | Esperado | Obtenido | Resultado
- Resumen al final: X/Y casos pasados
4. LIMPIEZA
- Borrar datos de prueba de RESULTADO!B4:B100
- Borrar datos de prueba de BASE (filas insertadas por el script)
- NO tocar las fórmulas en A, C, F
- Ambiente: Google Apps Script (V8 runtime)
- No usar librerías externas
SpreadsheetApp.flush()es necesario entre escritura de datos y lectura de fórmulas calculadas- Las fórmulas están en español (
CONTAR.SI,BUSCARV,SI,IFERROR) — los nombres de función en el script de prueba deben usar las versiones en inglés de la API de Apps Script si se construyen programáticamente, pero las fórmulas ya insertadas no deben tocarse - El script debe poder ejecutarse múltiples veces sin efectos secundarios
Un único archivo .gs (o bloque de código) con la función probarFormulas() lista para pegar en el editor de Apps Script del mismo Spreadsheet donde vive insertarFormulas().