|Refactoriza: nómina mensualDifícil
Ejercicio00:00

¿Quieres un reto mayor?

Resuelve en 15:00

info

Importante: Para que se registre el resultado tienes que iniciar sesión.

Refactoriza: nómina mensual

Difícil200 pts·Refactorización
ruleRestricciones de Refactoring
  • radio_button_unchecked
    Sin números mágicos
  • radio_button_unchecked
    Sin variables de una sola letra
  • radio_button_unchecked
    Declara constantes en UPPER_SNAKE_CASE
  • radio_button_unchecked
    Extrae al menos una función auxiliar

Enunciado

Contexto

Eres un desarrollador en una empresa de recursos humanos. El sistema de nómina fue escrito por alguien con prisa y tiene una función que mezcla demasiadas responsabilidades: calcula el salario bruto, aplica bonificaciones por categoría, determina el impuesto progresivo y finalmente retorna el salario neto.

Lo que debes hacer

Refactoriza la función calculateMonthlySalary para que sea legible, mantenible y bien estructurada:

  • Elimina los números mágicos — extrae constantes con nombres descriptivos en UPPER_SNAKE_CASE
  • Elimina las variables de una sola letra — usa nombres que comuniquen intención
  • Extrae funciones auxiliares — separa el cálculo del bruto, bono, impuesto y neto en funciones con responsabilidad única
  • Mantén exactamente el mismo comportamiento: mismas entradas, mismas salidas

Reglas de negocio

  • Si las horas o la tarifa son inválidas (≤ 0), retorna -1
  • Bonificación por categoría: "senior" → +20%, "mid" → +10%, "junior" → sin bono
  • Impuesto progresivo sobre el total (bruto + bono):
    • Si total > 5000 → 25%
    • Si total > 2000 → 15%
    • En otro caso → 8%
  • Retorna el salario neto redondeado a 2 decimales
Restriccionesexpand_more
  • Dificultad: Difícil
  • Completa todos los test cases para obtener los 200 puntos.
  • No modificar la línea export al final del archivo.
  • Se recomienda evitar el uso de inteligencia artificial para que realmente tú practiques los ejercicios.

Puedes usar console.log() para depurar. Los resultados aparecen en la Consola de salida, no en el navegador.

Inicia sesión para reaccionar
Inicia sesión para reaccionar
7 soluciones · 88% aceptación