Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Números negativos, redondeos y monedas

5 tareas · 40 min · Principiante

Un número puede ser válido para el lenguaje de programación y absurdo para el negocio: una cantidad negativa, un redondeo hacia el lado equivocado, un monto sin moneda. Despensa Mecato opera en Colombia en pesos y en Ecuador en dólares. Te entregan el carrito, el cálculo de cashback, las transferencias entre billeteras y sus registros de noviembre.

0 de 5 · 0%

Objetivo de la sala

Un número puede ser válido para el lenguaje de programación y absurdo para el negocio: una cantidad negativa, un redondeo hacia el lado equivocado, un monto sin moneda. Despensa Mecato opera en Colombia en pesos y en Ecuador en dólares. Te entregan el carrito, el cálculo de cashback, las transferencias entre billeteras y sus registros de noviembre.

Validar que un campo sea un número entero es validación sintáctica: comprueba la forma. La validación semántica comprueba que el valor tenga sentido para el negocio: una cantidad va de 1 a un tope razonable, un descuento de 0 al subtotal, un monto lleva su moneda. MITRE describe el caso de las cantidades como CWE-1284, validación incorrecta de una cantidad indicada en la entrada, y la guía de pruebas web de OWASP abre su capítulo de lógica de negocio con la validación de los datos según las reglas del negocio y no solo según su tipo.

Los números negativos son el ejemplo clásico: una línea con cantidad -4 resta del total en vez de sumar, y nada en el código lo impide si solo se pidió un entero.

Responde para continuar

¿Qué regla de validación corresponde al campo cantidad de una línea del carrito?

Ver pista de ayuda

La forma del dato es necesaria, pero no basta.

Abre el laboratorio y lee CarritoController.php en la carpeta mecato-numeros. El precio sale del catálogo, que es correcto, pero la cantidad solo se valida como entero. Luego revisa pedidos-lineas.txt.

Responde para continuar

¿Qué pedido tiene una línea que le resta dinero al total? Escribe su código.

Ver pista de ayuda

Busca una cantidad con signo menos.

Redondear una vez cuesta poco. Redondear en cada línea, siempre hacia el mismo lado, convierte una fracción de peso en una ganancia que crece con el número de líneas. Compara regla-cashback.txt con CashbackService.php: la regla calcula sobre el total y redondea hacia abajo; el código calcula por línea y redondea hacia arriba. Calcula lo que debió acreditarse en cada pedido de cashback-noviembre.txt según la regla y compáralo con lo acreditado.

Responde para continuar

¿Cuántos pesos de cashback se acreditaron de más en el extracto frente a lo que dice la regla?

Ver pista de ayuda

Hay un pedido con diferencia pequeña y otro con cuarenta líneas.

Un monto sin su moneda y su unidad es un número suelto. Lee billeteras.txt: en Colombia el saldo se guarda en pesos y en Ecuador en centavos de dólar. Después lee TransferenciaService.php, que resta y suma el mismo número, y transferencias.txt. Con la tasa interna del día, mira qué transferencia hizo aparecer en el destino mucho más valor del que salió del origen.

Responde para continuar

¿Qué transferencia convirtió pesos en dólares que valían muchas veces más? Escribe su identificador.

Ver pista de ayuda

Busca una transferencia de una billetera en pesos a una en dólares.

Los tres hallazgos tienen arreglo puntual (un mínimo en la cantidad, redondear una vez según la regla, convertir en la transferencia), pero comparten una causa de diseño: el dinero se maneja como un número suelto.

Responde para continuar

¿Qué práctica de diseño evita esta familia de errores con dinero?

Ver pista de ayuda

El error común fue separar el número de su moneda y de su unidad.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad