código completo funcional