Marta lleva la parte web de una cadena pequeña de academias de idiomas. Le pidieron algo sencillo: en la ficha de cada alumno, mostrar «Próxima renovación» a partir de la fecha de alta. Mensual, trimestral o anual. Una tarde de trabajo, pensó. Abrió Elffuss Code en el navegador, pegó el modelo de datos de la ficha y le pidió a la IA una función sumarMeses(fecha, n).
La primera versión era la de siempre: copiar la fecha y llamar a setMonth(getMonth() + n). Limpia y legible. Pasó los ejemplos que Marta tenía a mano (altas del 5, del 12, del 20) y la subió a pruebas.
El alumno que se dio de alta el 31
A la semana llegó la queja de recepción: un alumno dado de alta el 31 de enero tenía la renovación puesta el 3 de marzo. No era un error de pantalla. JavaScript hace exactamente lo que le pides: «31 de febrero» no existe, así que se desborda y cuenta los días que sobran hacia marzo. En años bisiestos el resultado es el 2 de marzo, para liarlo más.
Marta volvió al editor y, en vez de pedir un parche, le pidió a la IA otra cosa: «Dame casos de prueba que rompan esta función». La lista que salió estaba bien pensada:
- 31 de enero + 1 mes, en año normal y en bisiesto.
- 31 de marzo + 1 mes (abril tiene 30).
- 29 de febrero + 12 meses.
- 31 de enero + 1 mes − 1 mes: ¿vuelve al 31?
El último fue el que más le hizo pensar. Con la corrección obvia, que es «si el día no existe, quédate en el último día del mes», el 31 de enero pasa al 28 de febrero, y restarle un mes da el 28 de enero. Sumar y restar dejan de ser operaciones inversas. Y eso, en una academia, se traduce en un alumno que pregunta por qué le han movido tres días.
No era un bug, era una decisión
Aquí la IA hizo lo más útil del día: no eligió por ella. Le explicó las dos políticas posibles (recortar al último día del mes o desbordar al siguiente) y le propuso una tercera que usan muchos sistemas de facturación: calcular siempre desde la fecha de alta original, no desde la última renovación. Así el alumno del 31 renueva el 28 de febrero, el 31 de marzo, el 30 de abril, el 31 de mayo… sin ir perdiendo días mes a mes.
La función final quedó en unas veinte líneas: recibe la fecha de alta y el número de periodo, recorta al último día del mes cuando hace falta y nunca encadena resultados. Los casos de prueba de la lista se quedaron en el repositorio como tests.
Lo que más tardó no fue el código. Fue llamar a dirección para preguntar qué querían que pasara el 31.
Por qué en local
Para que la IA entendiera el problema, Marta pegó la ficha real de un alumno, con nombre, alta, importe de la cuota y forma de pago, y un trozo de las condiciones del contrato. No eran datos para mandar a un servicio externo, y con Elffuss Code no hizo falta: el modelo corre en la pestaña, sobre la GPU de su equipo, y ni la ficha ni el prompt salen de ahí. Tampoco tuvo que inventarse un alumno de mentira para preguntar. Pegó el caso que fallaba, tal cual.
Abre Elffuss Code y pídele que te rompa tu propia función de fechas: corre en el navegador y tu código no se sube a ningún sitio.
Abrir Code →