Solución actualizada con template